1. 核心概念
- IoC(Inversion of Control)控制反转
- 使用对象时,由主动new产生对象转换为由外部提供提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
- Spring技术对IoC思想进行了实现
- Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的外部。
- IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean。
- DI(Dependency Injection)依赖注入
- 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。
- 目标:充分解耦
- 使用IoC容器管理bean(IoC)
- 在IoC容器内将所有依赖关系的bean进行关系绑定(DI)
- 最终效果
- 使用对象时不仅可以直接从IoC容器中获取,并且获取到的bean已经绑定了所有的依赖关系。
2. IoC入门案例
1)思路分析
- 管理什么?——Service与Dao
- 如何将被管理的对象告知IoC容器?——配置
- 被管理的对象交给IoC容器,如何获取到IoC容器?——接口
- IoC容器得到之后,如何从容器中获取bean?——接口方法
- 使用Spring导入哪些坐标?——pom.xml
2)代码编写
BookServiceImpl.java
public class BookServiceImpl implements BookService{
private BookDao bookDao = new BookDaoImpl();
public void save(){
System.out.println("book service save...");
bookDao.save();
}
}
applicationContext.xml
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.Service.impl.BookServiceImpl"/>
main()所在类App.java
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao)ctx.getBean("bookDao");
bookDao.save();
3. DI入门案例
1)思路分析
- 基于IoC管理bean
- Service中使用new形式创建的Dao对象是否保留?(否)
- 那Service中需要的Dao对象如何进入到Service中?(提供方法)
- Service与Dao之间的关系如何描述?(配置)
2)代码实现
public class BookServiceImpl implements BookService{
private BookDao bookDao;
public void setbookDao(BookDao bookDao){
this.bookDao = bookDao;
}
public void save(){
System.out.println("book service save...");
bookDao.save();
}
}
applicationContext.xml
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.Service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>