2.1 IoC 发展简介
2.2 IoC 主要实现策略
-
依赖查找
-
依赖注入
2.3 IoC 容器的职责
-
依赖处理
-
依赖查找
-
依赖注入
-
-
生命周期管理
-
容器
-
托管的资源(Java Beans 或其他资源)
-
-
配置
-
容器
-
外部化配置
-
托管的资源(Java Beans 或其他资源)
-
2.4 IoC 容器的实现
-
Java SE
-
Java Beans
-
Java ServiceLoader SPI
-
JNDI(Java Naming and Directory Interface)
-
-
Java EE
-
EJB(Enterprise Java Beans)
-
Servlet
-
-
开源
-
Apache Avalon
-
PicoContainer
-
Google Guice
-
Spring Framework
-
2.5 传统 IoC 容器实现
Java Beans 作为 IoC 容器,特性如下:
-
依赖查找
-
生命周期管理
-
配置元信息
-
事件
-
自定义
-
资源管理
-
持久化
规范:
-
JavaBeans:Java SE Desktop Technologies
-
BeanContext:Extensible Runtime Containment and Services Protocol forJavaBeans Version 1.0
2.6 轻量级 IoC 容器
2.7 依赖查找 VS. 依赖注入
类型 | 依赖处理 | 实现便利性 | 代码侵入性 | API 依赖性 | 可读性 |
---|---|---|---|---|---|
依赖查找 | 主动获取 | 相对繁琐 | 侵入业务代码 | 依赖容器 API | 良好 |
依赖注入 | 被动提取 | 相对便利 | 低侵入性 | 不依赖容器 API | 一般 |
2.8 构造器注入 VS. Setter 注入
Spring 团队推荐使用构造器注入,对象是不可变的确保依赖对象不是空的,缺点是参数过多,代码看起来不是很良好,需要适当进行重构
Setter 注入应该仅用于可选对象的注入
2.9 面试题精选
2.9.1 什么是 IoC
简单的说,IoC 是控制反转,类似于好莱坞原则,主要有依赖查找和依赖注入实现
2.9.2 依赖查找和依赖注入的区别
依赖查找是主动或手动的依赖查找方式,通常需要依赖容器或标准 API 实现。而依赖注入则是手动或自动依赖绑定的方式,无需以来特定的容器和 API
2.9.3 Spring 作为 IoC 容器有什么优势
-
典型的 IoC 管理,依赖查找和依赖注入
-
AOP 抽象
-
事务抽象
-
事件机制
-
SPI 扩展
-
强大的第三方整合
-
易测试性
-
更好的面向对象