Spring框架 Ioc容器的使用
所需工具:
IntelliJ IDEA Ultimate 2019.2.4
JDK 1.8.0_221
maven 3.6.3
ioc是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring 的 IoC 思想。
Spring 提供了两种 IoC 容器,分别为 BeanFactory 和 ApplicationContext
- 创建好maven项目导入依赖
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.1.11.RELEASE</version>
</dependency>
.
2.创建spring配置文件 applicationContext.xml
(Spring 的配置文件名称是可以自定义的,通常情况下,都会将配置文件命名为 applicationContext.xml(或者 bean.xml))
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<!-- 由 Spring容器创建该类的实例对象 -->
<bean id="userDao" class="com.zdq.ioc.impl.UserDaoImpl" />
</beans>
<!--2~5 行代码是 Spring 的约束配置,第 7 行代码表示在 Spring 容器中创建一个id为userDao的 bean 实例,
其中 id 表示文件中的唯一标识符,class 属性表示指定需要实例化Bean的实全限定类名(包名+类名)-->
3.编写UserDao接口
package com.zdq.ioc;
public interface UserDao {
public void query();
}
4.创建UserDao接口的实现类
package com.zdq.ioc.impl;
import com.zdq.ioc.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void query() {
System.out.println("在Spring容器中创建一个id为userDao的bean实例");
}
}
5.编写单元测试类
package com.test;
import com.zdq.ioc.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class OneTest {
@Test
public void test() {
// 定义Spring配置文件的路径
String xmlPath = "applicationContext.xml";
// 初始化Spring容器,加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
// 通过容器获取userDao实例
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
// 调用userDao 的 add ()方法
userDao.query();
}
}
运行单元测试类,在控制台即可看到UserDao接口实现类的方法打印出的 “在Spring容器中创建一个id为userDao的bean实例”,在程序执行时,对象的创建并不是通过new一个类完成的,而是由 Spring容器管理实现的。这就是Spring IoC容器思想的工作原理。