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