IoC控制反转
- 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权转移到外部,此思想称为控制反转
- Spring技术对IoC思想进行了实现
- Spring提供了一个容器,称为IoC,用来充当思想中的外部
- IoC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IoC容器中被称为bean
DI依赖注入
- 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入 目的是为了充分解耦
IoC的使用(xml)
1、导入Spring坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
2、创建Spring配置文件,配置对应类作为Spring管理的bean(bean定义时id属性在同一个上下文不能重复)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- bean标签配置bean-->
<!-- id属性表示给bean取名字-->
<!-- class属性表示给bean定义类型-->
<bean id="BookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="BookService" class="com.itheima.service.impl.BookServiceImpl">
<!-- 配置service和dao的关系-->
<!-- name属性表示配置那个具体的属性-->
<!-- ref属性表示参照那个bean-->
<property name="bookDao" ref="BookDao"/>
</bean>
</beans>
3、初始化容器(Spring核心容器/Spring容器),通过容器获取bean
package com.itheima;
import com.itheima.dao.BookDao;
import com.itheima.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class main {
public static void main(String[] args) {
//初始化容器
ApplicationContext txt = new ClassPathXmlApplicationContext("applicationContext.xml");//将配置文件名传入
BookDao bookDao = (BookDao) txt.getBean("BookDao");//用容器对象调用getBean方法将配置文件bean的id传入得到bean对象即可
bookDao.getId();
BookService bookService = (BookService) txt.getBean("BookService");
bookService.getId();
}
}
DI使用
1、提供依赖对象对应的set方法 2、配置service和dao之间的关系即可
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- bean标签配置bean-->
<!-- id属性表示给bean取名字-->
<!-- class属性表示给bean定义类型-->
<bean id="BookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="BookService" class="com.itheima.service.impl.BookServiceImpl">
<!-- 配置service和dao的关系-->
<!-- name属性表示配置那个具体的属性-->
<!-- ref属性表示参照那个bean-->
<property name="bookDao" ref="BookDao"/>
</bean>
</beans>
容器会自动的调用你提供的set方法
bean
由于Spring容器管理那些可以复用的对象,干脆就默认为单例
-
适合交给容器进行管理的bean
-
表现层对象
-
业务层对象
-
数据层对象
-
工具对象
-
不适合交给容器管理的bean
-
封装实体的域对象