1.能够说出IoC与DI的概念
IoC(Inversion of Control)控制反转,在使用对象时,由主动new创建对象转换为由IoC容器提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
DI(Dependency Injection)依赖注入,在容器中建立bean与bean之间依赖关系的整个过程,称为依赖注入。
2.能够完成IoC入门案例的制作
(1)导入Spring坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
(2)定义Spring管理的类(接口)
public interface BookService {
public void save();
}
public class BookServiceImpl implements BookService {
private BookDao bookDao = new BookDaoImpl();
public void save() {
bookDao.save();
}
}
(3)创建Spring配置文件,配置对应类作为Spring管理的bean
//id指这个bean的名字,在配置文件中是唯一的,class指这个bean的类型
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
</bean>
(4)初始化IoC容器(Spring核心容器/Spring容器),通过容器获取bean
public class App {
public static void main(String[] args) {
//加载配置文件得到上下文对象,也就是容器对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取资源
BookService bookService =(BookService)ctx.getBean("bookService");
bookService.save();
}
}
3.能够基于XML配置文件格式正确定义bean
(1)bean的基础配置
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
或
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
</bean>
(2)bean的别名配置
<bean id="bookDao" name="dao bookDaoImpl" class="com.itheima.dao.impl.BookDaoImpl"/>
或
<bean name="service,bookServiceImpl" class="com.itheima.service.impl.BookServiceImpl"/>
(3)bean的作用范围配置
定义bean的作用范围,可选范围如下
singleton:单例(默认),指多次getBean的对象为同一个
prototype:非单例,指多次getBean的对象是多个
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" scope="singleton" />
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" scope="prototype" />
4.能够使用setter注入方式实现bean属性注入
(1)setter注入—简单类型
在bean中定义引用类型属性并提供可访问的set方法
public class BookDaoImpl implements BookDao {
private int connectionNumber;
public void setConnectionNumber(int connectionNumber) {//为变量提供set方法,是注入的入口
this.connectionNumber = connectionNumber;
}
}
配置中使用property标签value属性注入简单类型数据
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
<property name="connectionNumber" value="10"/>//name为变量名,value是为变量赋的值
</bean>
(2)setter注入—引用类型
在bean中定义引用类型属性并提供可访问的set方法
public class BookServiceImpl implements BookService{
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {//该set方法提供注入的入口,使用alt+insert自动生成
this.bookDao = bookDao;
}
}
配置中使用property标签ref属性注入引用类型对象
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>//这里的name指的是上述实现类中定义的bookDao,ref指的是该配置文件中id为bookDao的bean
</bean>
5.能够使用自动装配的方式实现bean属性注入
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
常用的有两种
(1)按照类型自动装配
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>
//这里按照类型自动装配,为实现类中定义的bookDao变量进行装配(相当于new了一个对象),spring会自动在配置文件中查找类型为bookDao类型的bean
(2)按照名称自动装配(不推荐使用)
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byName"/>
//这里按照类型自动装配,spring会查找配置文件中id为bookDao的bean