提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Spring核心概念
什么是IoC(Inversion of Control)
代码现状
编写一个业务层实现类,实现业务层接口,在里边创建数据层接口并给出数据层的实现,并调对应的操作:
存在问题——耦合度过高
当想要替换数据层的实现时,如:
一旦修改,源代码也修改,意味着需要重新编译、测试等等。
正因为在 类 里边写了其他的一些实现,便导致代码的耦合度偏高
解决方案
既然是因为写了该实现导致耦合度偏高,那就不写?
此时的业务层代码:
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void save(){
userDao.save();
}
}
但此时程序没有实现对象
,运行不起来!
那没有对象怎么办?那就外部给它一个对象
!
即:
使用对象时,不要主动new一个对象,而是由外部提供一个对象。
IoC——控制反转
使用对象时,从主动new创建,转换为由外部提供对象。
过程中对象的控制权
由程序转移到外部。
这样的思想便成为控制反转。
Spring实现IoC
IoC容器
spring提供了一个容器,成为IOC容器,也就是IOC思想中的“外部”
Bean
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已经绑定了所有依赖关系