Spring-核心概念
- IoC/DI
- IoC容器
- Bean
1.1 现存问题
-
代码书写现状:代码耦合度高;
-
例如:
// BookServiceImpl.java public class BookServiceImpl implements BookService{ private BookDao bookDao = new BookDaoImpl(); public void save(){ bookDao.save(); } } //BookDaoImpl.java public class BookDaoImpl implements BookDao{ public void save() { System.out.println("impl ==== 1"); } } //BookDaoImpl2.java public class BookDaoImpl2 implements BookDao{ public void save() { System.out.println("impl ==== 2"); } }
-
若
BookDao
接口的save方法的具体实现发生变化,则需要修改BookServiceImpl.java
中的代码,导致项目需要重新编译,测试,部署等等;
-
-
解决方案:
- 在使用对象时,程序中不主动使用new产生对象,而是由外部提供该对象实例;
- 引入IoC和DI的概念
1.2 IoC:控制反转
- IoC:全拼
Inversion of Control
,即控制反转; - 概念:使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建的控制权由程序转移到外部,这种思想成为控制反转。
- Spring技术对IoC思想进行了实现:
- Spring提供了一个容器,称为IoC容器,用于充当上述Ioc思想中的**“外部”**。
- Ioc容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象(service、dao等)在IoC容器中统称为Bean;
- 实现了IoC后,我们可以获得对象实例,但是,如果当前对象实例依赖于另一个对象实例,则仍然会报错;
- 解决方案:“引入DI的概念”
1.3 DI:依赖注入
- DI:全拼
Dependency Injection
,即依赖注入; - 概念:在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。
1.4 结果
- 实现了IoC和DI的思想之后:
- 使用对象时,不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了其所有的依赖关系。