Skip to content

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容器,提高组件之间解耦。