什么是IoC?

IoC是控制反转,控制的是bean的创建、管理、生命周期,反转的是控制的权力,对于Spring来说,就是将bean的控制权交给Spring框架管理。

另一种说法是把IoC当作一个bean的容器,叫做IoC容器,我们可以从容器中获取bean。

控制反转的优点:

  • 方便:无需关注bean的具体实现过程,相当于一个黑盒

什么是DI?

DI是依赖注入,DI是IoC的一种具体实现,表现为将设置对象的依赖的控制权反转,意思就是通过DI实现bean生命周期控制权的反转。同理不自己new对象,而是Spring项目启动的时候,IoC容器帮你new对象。

依赖是程序运行时对象需要的外部的一些数据资源,注入是把这些数据资源填充到bean对象的内部,让对象间产生依赖关系。

DI优点:

  • 解耦:它把对象之间的依赖关系转成用配置文件来统一管理,避免不同业务互相影响,利于修改。

一般有三种方式注入:

构造器注入

1
2
3
4
5
6
7
8
9
10
11
12
13
@Configuration
public class AppConfig {

@Bean
public Item item1() {
return new ItemImpl1();
}

@Bean
public Store store() {
return new Store(item1());
}
}

Setter方法注入

1
2
3
4
5
6
@Bean
public Store store() {
Store store = new Store();
store.setItem(item1());
return store;
}

字段的依赖注入

  • 该方法使用反射来注入依赖,这比基于构造函数或基于 Setter 注入方法的成本更高。
1
2
3
4
public class Store {
@Autowired
private Item item;
}