今天看第五条:优先考虑依赖注入来引用资源。
依赖注入(Dependence Inversion)指在创建新实例时将资源传递到构造器中。作者用拼写检查器依赖字典的例子,说明了使用静态工具类或单例模式的问题:他们不适合与需要引用底层资源的类。接着就给出了依赖注入的例子,并分享了这种例子的变体,将工厂类传递给构造器,这样工厂可以被重复调用来生成实例的对象。
Mosaic create(Supplier<? extends Tile> tileFactory) { ... }
说到依赖注入,我就想起来Spring的控制反转(Inversion of Control)。它也是获取对象的方式被改变了,不需要自己去new,可以通过IOC容器去创建,由容器去注入依赖,从思想上反转了需求关系,是面向对象的一大法宝。
我们系统中也大量使用了依赖注入,一般都是通过Spring来管理的,这也是IOC的体现。但是有时候和静态方法放在一起也会由于各个容器初始化对象的时间导致一些问题,所以要求我们不仅要会用,还要更深入理解它的机制才行。还有一些地方使用的也是Spring生成的Bean,但是没有让Spring自己去注入,而是使用的时候自己通过Beans.get去查找,这样可以在非Spring管理的地方也能使用Spring生成的Bean。
网友评论