Spring核心概念提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 什么是IoC(Inversion of Control)
- 代码现状
- 存在问题——耦合度过高
- 解决方案
- IoC——控制反转
- Spring实现IoC
- IoC容器
- Bean
- DI (Dependency Injection)——依赖注入
- 总结
- 目标:充分解耦
- 1、IoC
- 2、DI
- 最终效果
什么是IoC(Inversion of Control) 代码现状
编写一个业务层实现类,实现业务层接口,在里边创建数据层接口并给出数据层的实现,并调对应的操作:
存在问题——耦合度过高当想要替换数据层的实现时,如:
一旦修改,源代码也修改,意味着需要重新编译、测试等等。
正因为在 类 里边写了其他的一些实现,便导致代码的耦合度偏高
既然是因为写了该实现导致耦合度偏高,那就不写?
此时的业务层代码:
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void save(){
userDao.save();
}
}
但此时程序没有实现对象,运行不起来!
那没有对象怎么办?那就外部给它一个对象!
即:
使用对象时,不要主动new一个对象,而是由外部提供一个对象。
使用对象时,从主动new创建,转换为由外部提供对象。
过程中对象的控制权由程序转移到外部。
这样的思想便成为控制反转。
Spring实现IoC IoC容器
spring提供了一个容器,成为IOC容器,也就是IOC思想中的“外部”
IOC容器中存放了大量对象,它管理对象的创建、初始化等等工作,这些对象,在IOC容器中,统称Bean。
DI (Dependency Injection)——依赖注入在容器中建立bean与bean之间的依赖关系的过程
在之前的业务代码中,service运行是依赖dao对象的,仅仅造了service对象依旧无法运行。
既然service与dao之间存在依赖关系(并不是随便将几个对象绑定,而是它们之间存在依赖关系),而它俩又都在IOC容器中。
于是,IOC容器把service与dao之间的依赖关系绑定,这样一来,容器将service对象给过去,绑定的dao对象也有了,也可以直接使用了!
绑定关系的过程,便是依赖注入。
总结 目标:充分解耦 1、IoC使用IOC容器管理bean
2、DI在IOC容器内将有依赖关系的bean进行关系绑定
最终效果①使用对象时可直接从IOC容器中获取。
②获取到的bean已经绑定了所有依赖关系



