一、IOC 容器的职责
1、通用职责
2、依赖处理
- 依赖查找
- 依赖注入
3、生命周期管理
- 容器
- 托管的资源(Java Beans 或其他资源)
4、配置
- 容器
- 外部化配置
- 托管的资源(Java Beans 或其他资源)
二、传统IOC 容器的实现
1、Java SE
Java Beans 、Java Service SPI 、JNDI(Java Naming and Directory Interface)
2、Java EE
EJB(Enterprise Java Beans) 、Servlet
3、开源
Apache Avalon(http://avalon.apache.org/closed.html)
PicoContainer(http://picocontainer.com/)
Google Guice(https://github.com/google/guice)
Spring Framework(https://spring.io/projects/spring-framework)
三、依赖查找于依赖注入
类型 | 依赖处理 | 实现便利性 | 代码侵入性 | API 依赖性 | 可读性 |
---|---|---|---|---|---|
依赖查找 | 主动获取 | 相对繁琐 | 侵入业务逻辑 | 依赖容器API | 良好 |
依赖注入 | 被动提供 | 相对遍历 | 低侵入性 | 不依赖容器 | 一般 |