Spring(02)重新认识 IoC
1. IoC 发展简介
- 1983年,Richard E. Sweet 在《The Mesa Programming Environment》中提出 “Hollywood Principle”(好莱坞原则)
 
- 1988年,Ralph E. Johnson & Brian Foote 在《Designing Reusable Classes》中提出 “Inversion of control”(控制反转)
 
- 1996年,Michael Mattsson 在《Object-Oriented Frameworks, A survey of methodological issues》中将“Inversion of control”命名为“Hollywood principle”
 
- 2004年,Martin Fowler 在《Inversion of Control Containers and the Dependency Injection pattern》中提出了自己对 IoC 以及 DI 的理解
 
- 2005年,Martin Fowler 在《Inversion Of Control》对IoC 做出进一步的说明
 
2. IoC 主要实现策略
维基百科(https://en.wikipedia.org/wiki/Inversion_of_control)
Implementation techniques 小节的定义:
In object-oriented programming, there are several basic techniques to implement inversion of control. These are:
- Using a service locator pattern(SPI)
 
- Using dependency injection, for example(依赖注入)
- Constructor injection(构造器注入)
 
- Parameter injection(参数注入)
 
- Setter injection(setter 方法注入)
 
- Interface injection(接口回调)
 
 
- Using a contextualized lookup(依赖查找)
 
- Using template method design pattern(模板方法)
 
- Using strategy design pattern(策略模式)
 
3. IoC 容器的职责
- 依赖处理
 
- 生命周期管理
- 容器
 
- 托管的资源(Java Beans 或其他资源)
 
 
- 配置
- 容器
 
- 外部化配置
 
- 托管的资源(Java Beans 或其他资源)
 
 
4. IoC 容器的实现
- Java SE
- Java Beans
 
- Java ServiceLoader SPI
 
- JNDI(Java Naming and Directory Interface)
 
 
- Java EE
- EJB(Enterprise Java Beans)
 
- Servlet(eg: Tomcat、Jboss)
 
 
- 开源
 
5. 传统 IoC 容器实现
Java Beans 作为 IoC 容器
- 特性
- 依赖查找
 
- 生命周期管理
 
- 配置元信息
 
- 事件
 
- 自定义
 
- 资源管理
 
- 持久化
 
 
- 规范
 
6. 轻量级 IoC 容器
7. 依赖查找VS. 依赖注入
| 依赖查找 | 
主动获取 | 
相对繁琐 | 
侵入业务代码 | 
依赖容器API | 
良好 | 
| 依赖注入 | 
被动提供 | 
相对便利 | 
低侵入 | 
不依赖容器API | 
一般 | 
8. 构造器注入 VS. Setter 注入
- 构造器注入只能根据参数的顺序执行,而 Setter 注入则是无序。
 
- 构造器注入可以将字段设置为 final,保证一致性。
 
- 很多时候,我们希望 bean 一旦初始化后就不能被修改,此时可以使用构造器注入。
 
9. 面试题精选
问题1:什么是 IoC ?
答:简单地说,IoC 是反转控制,类似于好莱坞原则,主要有依赖查找和依赖注入实现。
问题2:依赖查找和依赖注入的区别?
答:依赖查找是主动或手动的依赖查找方式,通常需要依赖容器或标准 API 实现。而依赖注入则是手动或自动依赖绑定的方式,无需依赖特定的容器和 API。
问题3:Spring 作为 IoC 容器有什么优势?
答:Spring 优势有
- 典型的 IoC 管理,依赖查找和依赖注入
 
- AOP 抽象
 
- 事务抽象
 
- 事件机制
 
- SPI 扩展
 
- 强大的第三方整合
 
- 易测试性
 
- 更好的面向对象
 
每天用心记录一点点。内容也许不重要,但习惯很重要!
Spring(02)重新认识 IoC
原文:https://www.cnblogs.com/binarylei/p/12290197.html