一、spring的IOC技术
1、IOC介绍
IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。IOC它是一种思想,而不仅仅是技术。
举例说明:
在JavaWEB中进行编程的时候,一般都是在WEB层的代码中创建Service层类的对象,然后再Service层的类中创建Dao层类的对象,完成相关的方法调用。
WEB层的代码和Service层代码严重耦合。这种写法会导致如果Service层的代码有改动,可能会导致web层代码跟着改动。
// web层:
public class UserServlet{
UserService userService = new UserService();
}
// service层
public class UserService{
UserDao userDao = new UserDao();
}
// dao层
public class UserDao{
}
IOC编程思想:
将项目中的所有对象全部统一交给Spring框架进行管理, 不管在是在哪一层编写代码,只要需要对象,直接找Spring框架获取即可。对象的创建、维护、销毁等动作全部都Spring框架完成。我们编程时只需要关注自己项目的逻辑代码,而具体对象一些创建、销毁等事情不用再操心。
// web层:
public class UserServlet{
// 从Spring容器获取到UserService对象,注入给当前的这个引用
UserService userService;
}
// service层
public class UserService{
// 从Spring容器获取到UserDao对象,注入给当前的这个引用
UserDao userDao;
}
// dao层
public class UserDao{
}
Spring会将UserServlet、UserService、UserDao的对象统一创建和维护。
2、IOC管理对象
将程序的所有对象创建、维护、销毁的动作全部交给Spring去处理,而程序中仅仅只是使用对象而已。
2.1、编写spring的配置文件
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
Spring管理对象,IOC技术,
在spring的配置文件中使用bean标签来进行配置
-->
<bean id="userDao" class="com.neusoft.dao.UserDao" />
<bean id="userService" class="com.neusoft.service.UserService" />
</beans>
2.2、编写测试类
public class SpringTest {
@Test
public void demo1(){
// 需要获取到Spring的核心对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 可以去使用Spring管理的任何对象
UserDao userDao = (UserDao) context.getBean("userDao");
// 调用获取到的对象中的方法
userDao.findUser();
userDao.addUser();
}
}
3、在类中注入别的类的对象(DI)
需要在类中添加相关的属性,然后提供setXxx方法,在spring的配置文件中通过配置将对象注入
@Test
public void demo2(){
// 需要获取到Spring的核心对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 可以去使用Spring管理的任何对象
UserService userService = (UserService) context.getBean("userService");
// 调用获取到的对象中的方法
userService.findUser();
userService.addUser();
}
DI:dependency injection 依赖注入。Spring容器(Spring框架、IOC容器)负责对象的创建(Spring管理的任何对象都成为一个Bean),当类和类之间有依赖关系的时候,可以依赖注入的方式将一个对象动态的注入到别的类中。
IOC:它主要体现在对象的维护上(创建、维护、销毁等)。
DI:主要体现在对象之间的相互引用,主要是用户管理依赖(对象之间的关系)。