IoC容器详解
一、对象管理的问题
普通Java:
java
UserService service = new UserService();程序主动创建对象。
小项目没问题。
企业项目:
Controller依赖Service
Service依赖Repository
Repository依赖数据库连接。
如果全部new:
- 代码耦合
- 修改困难
- 测试困难
二、IoC思想
IoC:
Inversion of Control
控制反转。
以前:
业务代码控制对象。
现在:
Spring容器控制对象。
三、最简单容器实现
java
public class ApplicationContext {
private Map<Class<?>,Object> beans =
new HashMap<>();
public void addBean(
Class<?> type,Object bean){
beans.put(type,bean);
}
public Object getBean(
Class<?> type){
return beans.get(type);
}
}四、源码理解
为什么使用Class作为key?
因为:
UserService.class唯一代表这个类型。
为什么使用Map?
因为容器需要快速找到Bean。
五、Spring真实实现
Spring:
BeanFactory
DefaultListableBeanFactory
比我们的Map复杂:
- BeanDefinition
- 生命周期
- 后置处理器
- 代理
六、面试
IoC是将对象创建和依赖管理交给Spring容器,提高组件之间解耦。