1 概念
IoC(Inversion of Control)控制反转:由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
tips:
【外部】:指的是Spring提供了一个容器,称为IoC容器。IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在1oC容器中统称为Bean。
DI ( Dependency Injection )依赖注入:在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。
2 实际案例
2.1 IoC实例
IoC入门案例思路分析
使用Spring导入哪些坐标?(pom.xml)
如何将被管理的对象告知IoC容器?(配置)
被管理的对象交给IoC容器,如何获取到IoC容器?(接口)
IoC容器得到后,如何从容器中获取bean?(接口方法)
- 在pom.xml中导入Spring的坐标
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context(/artifactId>
<version>5.2.10.RELEASE</version)
</dependency>
</dependencies>
- 在resources目录下创建applicationContext.xml,并配置相应的bean
<bean id = "bookDao" class = "com.itheima.dao.imp1.BookDaoImp1"/>
- 获取SpringIoC容器中的bean.
public static void main(String[] args){
ApplicationContext ctx = new ClassPathXmlApplicationContext( configlocation:"applicationContext.xm1");
BookDao bookDao = (BookDao) ctx.getBean( s:"bookDao");
//调用bean的方法
bookDao.save();
2.2 DI 入门案例
DI入门案例思路分析:(基于IoC管理bean)
1.Service与Dao间的关系如何描述?(配置)
2. Service中使用new形式创建的Dao对象是否保留?(否)
3. Service中需要的Dao对象如何进入到Service中?(提供方法)
以Service调用dao为例:
- 删除Service中的new对象方法,提供声明对象对应的set方法。
public class BookServiceImpl implements BookServices {
private BookDao bookDao; //不用new,通过set方法拿到bean
public void save(){
System.out.println("book service save ....");
bookDao.save();
}
public void setBookDao(BookDao bookDao){
this.bookDao = bookDao;
}
}
- 在applicationContext.xml配置文件中声明bean的注入关系。
<配置bean-->
<!--bean标签标示配置bean
id属性标示fltean起名字
closs属性表示给bean定义类型-->
<bean id="bookdao" class="com.itheima.dao.imp1.BookDaoImp1"/>
<bean ida"bookService" classs"com.itheima.service.imp1.BookServiceImp1">
<!--配置server 与doo的关系-->
<!--property标签表示配置当前bean的属性
name属性表示配置哪一个具体的属性
ref属性表示参照那一个bean-->
<property name="bookDao”refs"bookDao"/>
</bean>
3 总结
在实际项目中,创建Bean以及依赖注入均已经使用了注解的方式来进行,封装的较好,但不利于理解控制反转以及依赖注入等。本专栏打算由浅入深,从基础的配置实现方式进行讲解,来逐步学习Spring的核心思想,常学常新,你我共勉。