1.依赖查找
依赖查找是控制反转设计原则的一种实现方式。大体思路是:容器中的受控对象通过容器的API来查找自己所依赖的资源和协作对象。这种方式虽然降低了对象间的依赖,但是同时也使用到了容器的API,造成了我们无法在容器外使用和测试对象。依赖查找是一种更加传统的IOC实现方式。
两种查找方式:
- 依赖拖拽(DP):注入的对象如何与组件发生联系,这个过程就是通过依赖拖拽实现;
- 上下文化依赖查找(CDL):在某些方面跟依赖拖拽类似,但是上下文依赖查找中,查找的过程是在容器管理的资源中进行的,而不是从集中注册表中,并且通常是作用在某些设置点上;
2.依赖注入
依赖注入是自身对象中的内置对象是通过注入的方式进行创建,无需依赖特定的容器和API。容器全权负责组件的装配,它会把符合依赖关系的对象通过属性(JavaBean中的setter)或者是构造子传递给需要的对象。
四种注入方式:
- 构造函数方法注入
- Setter方法注入
- 接口注入
- 基于注解的依赖注入
注:Spring主要提供了@Autowired
和@Resource
注解模式:
1.@Autowired
注解,可以对Bean类成员变量、方法及构造函数进行标注,完成依赖注入的自动装配工作。使用@Autowired可以省略Bean类的待依赖注入对象的set方法,默认情况下按照依赖注入对象的类型自动进行匹配。
2.@Resource
注解的功能和@Autowired
注解功能相近,它有name
和type
两个主要的属性。Spring容器对于@Resource注解的name
属性解析为bean的名字,type
属性则解析为bean的类型。
3.优劣对比
类型 | 依赖处理 | 实现便利性 | 代码侵入性 | API依赖性 | 可读性 |
---|---|---|---|---|---|
依赖查找 | 主动获取 | 相对繁琐 | 侵入业务逻辑 | 依赖容器API | 良好 |
依赖注入 | 被动提供 | 相对便利 | 低侵入性 | 不依赖容器API | 一般 |