1.什么是IOC(控制反转)
简单理解:就是将创建对象的权力,由JAVA代码转移到Spring容器,由Spring的容器控制创建对象,就是控制反转。Spring创建对象时,读取配置文件信息,然后通过反射机制给我们创建好对象储存起来,当我们需要对象时候,通过id获取对象即可,不需要我们自己去new。
Spring体系结构:
2.Spring IOC代码测试
【1】创建一个maven项目
【2】pom.xml导入依赖项
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
【3】定义一个接口
package com.jlx.dao;
public interface EmpDao {
int addEmp();
}
【4】定义一个实现类
package com.jlx.dao.impl;
import com.jlx.dao.EmpDao;
public class EmpDaoImpl implements EmpDao {
@Override
public int addEmp() {
System.out.println("EmpDaoImpl addEmp invoked");
return 0;
}
}
【5】为了读取容器对象,我们在resources下新建一个spring.xml文件
bean标签的两个数学
id:找对象用的id(见名知意)
class:要实例化的对象
<?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 id="empDao" class="com.jlx.dao.impl.EmpDaoImpl"></bean>
</beans>
【6】创建一个test测试用例,获取容器
@Test
public void testGetBean(){
//获取容器
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring.xml");
EmpDao empDao = (EmpDao) applicationContext.getBean("empDao");
empDao.addEmp();
}
【7】测试结果
这样就完成了一个基本的IOC容器测试
3.IOC原理
【1】 XML解析技术读取配置文件
<bean id="empDao" class="com.msb.dao.impl.EmpDaoImpl"></bean>
将上面的信息读取进入程序 对象的ID ,一个是对象的类的全路径名
【2】反射技术实例化对象,放到容器中
获得类的字节码:
Class clazz =Class.forName("com.msb.dao.impl.EmpDaoImpl")
通过字节码实例化对象:
Object obj = clazz.newInstance();
将对象放到一个map集合中:
map.put("empDao",obj)
3工厂模式返回Bean对象 getBean方
public Object getBean(String name){
Object obj =map.get(name);
return obj;
}
BeanFactory接口: IOC容器基本功能接口,是spring内部使用的接口,我们在处理业务时一般不直接使用该接口。
ApplicationContext接口: BeanFactory的子接口,提供更多更强大的功能,研发人员一般使用的接口。
4.什么是DI(依赖注入)
DI(Dependency Injection),即“依赖注入” 就是创建属性时给对象属性赋值。由于对象的属性可能有好多数据类型,依赖注入就会将更多的的对象之间的关系整合到一起,形成一个庞大的依赖关系。
DI处理的是对象的属性赋值和互相依赖的关系。