Spring到底是如何通过ioc思想管理Bean的呢?
每次管理Bean,我们都通过这种工厂+反射的机制实现,也很麻烦。现在是时候揭开Spring管理Bean的谜底了,这也就是Spring的ioc思想!Spring到底是如何通过ioc思想管理Bean的呢?接下来我们来细细分解。
一. Spring IOC入门案例的搭建
在搭建入门案例之前,首先我们需要明确什么是IOC?IOC(Inversion of Control),俗称控制反转,它是一种设计思想,将对象创建的权利交给Spring去做,而非对象直接通过我们程序员手动的去new。
接下来文哥带领大家搭建一个简单的ioc入门案例,体会一下Spring的如何帮助我们管理Bean的,基于这个案例仔细体会IOC的概念。其实Spring管理Bean的方式和我们上一节基于工厂+反射管理Bean的手法是一样的,只不过Spring做的粒度更加细腻!
1. 创建maven工程,导入Spring的依赖
首先我们创建一个普通的maven工程,然后导入Spring的核心依赖Spring-context,这个依赖是构建Spring项目环境的基础。
org.springframework
spring-context
5.2.0.RELEASE
注意:Spring-context是整个Spring环境的核心依赖,它包含很多子依赖,那么这些子依赖有哪些作用。
2. 创建Dao接口和实现类
我们创建一个接口和实现类,模拟对数据库进行操作。后续我们想让Spring框架帮助我们将接口实现类所属的Bean管理起来。
2.1 Dao接口
我们定义一个模拟操作用户模块的dao接口及其实现类,在这里只模拟一个新增用户的方法,并不真正的对数据库进行操作。
public interface UserDao {
public void addUser();
}
2.2 创建Dao接口的实现类
我们定义一个实现类,对Dao接口进行实现。
public class UserDaoImpl implements UserDao {
public void addUser() {
System.out.println("基于JDBC对新增用户的方法进行实现");
}
}
3. 创建业务接口和实现类
我们再定义一个模拟操作用户模块的业务接口及其实现类。注意:暂时不对dao接口进行调用。
3.1 创建业务接口
创建一个业务接口,这个接口主要定义了实现新增用户的方法。
public interface UserService {
public void addUser();
}
3.2 创建业务接口实现类
创建一个业务接口实现类,这个业务接口实现类我们暂时不去调用Dao接口中的方法。
public class UserServiceImpl implements UserService {
public void addUser() {
System.out.println("userService方法被实现了.....");
}
}
到目前我们分别定义了dao接口的实现类,还有就是service的实现类。后续我们想让Spring框架帮助我们对这两个实现类进行管理。
如何让Spring帮助我们管理Bean呢?接下来我们先创建Spring的配置文件。
4. 创建Spring的配置文件
我们通过IDEA创建Spring的配置文件(applicationContext.xml)。
4.1 定义配置信息
在Spring的配置文件中我们定义如下:
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">
这个配置文件里面的配置信息到底是什么意思?接下来文哥给大家详细解读一下:
4.2 详解配置信息
现在文哥对这个配置文件里面的标签和属性进行详细讲解。
applicationContext.xml
Spring的配置文件,名称可以自定义,也有叫Bean.xml的。作用类似于我们上一节自己定义的Bean.properties配置文件。
Bean标签
管理Bean的标签。Spring底层会通过dom4j的技术解析xml中的Bean标签,然后获取Bean的详细信息,比如Bean的名称,还有Bean所属类的全限定名。
id属性
Bean的名字。自定义,但是id的值必须唯一!
class属性
Bean所属类的全限定名,也就是包名+类名。
到这里,详细各位小伙伴对这个配置文件的配置信息非常明白了,现在我们就来测试,看看Spring有没有帮助我们管理Bean。
二. 测试入门案例
1. 创建测试类
接下来我们创建测试类,来测试Spring容器管理的Bean能不能成功获取。
1.1 引入Junit依赖
我们编写一个junit单元测试类,来尝试从Spring容器中获取Bean,看能不能拿到Bean。所以我们先要在项目的pom.xml中引入junit的依赖:
junit
junit
4.13
test
1.2 创建Junit测试类
我们创建一个Junit测试类,专门用来从Spring容器中获取Bean。
public class TestBean {
@Test
public void test01(){
//获取spring的容器 IOC(将对象创建的权利交给spring来管理)容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//根据bean的名称获取
UserDao userDao = (UserDao) context.getBean("userDao");
System.out.println(userDao);
userDao.addUser();
UserService userService = (UserService) context.getBean("userService");
System.out.println(userService);
userService.addUser();
}
}
2. 详解测试类
这个测试类到底是什么意思呢?接下来文哥给大家详细解释清楚。
ApplicationContext
Spring容器的接口,定义了Spring的容器的约束和规范。
ClassPathXmlApplicationContext
ApplicationContext接口的实现类,作用就是从类路径下面加载Spring的配置文件,生成ioc容器。
getBean方法,从容器中获取Bean的方法,类似于我们之前自己在工厂类里面定义的获取Bean的方法。
经过测试,我们查看控制台测试结果如下:
com.qf.dao.impl.UserDaoImpl@60438a68
基于JDBC对新增用户的方法进行实现
com.qf.service.impl.UserServiceImpl@140e5a13
userService方法被实现了.....
我们发现,我们可以成功获取Dao和Service的实现类Bean,并且可以成功调用对应的方法。说明我们通过Spring管理Bean成功了!
小伙伴再回忆一下ioc的概念,有没有觉得Bean的管理是Spring帮助我们去做的,而非我们自己创建的。
对比我们之前反射+工厂的机制管理Bean,我们发现ClassPathXmlApplicationContext的作用就是我们之前写的BeanFactory。
相关推荐HOT
更多>>如何添加Java环境变量?
要添加Java环境变量,可以按照以下步骤:并安装Java开发工具包(JDK)、找到Java安装路径、设置JAVA_HOME环境变量、添加Java可执行文件路径到PATH...详情>>
2023-05-04 11:00:56从零开始学Java之String字符串的编码
对很多小白来说,可能不明白什么是字符编码,也不知道为什么要有字符编码,所以先来给大家简要地介绍一下字符编码。详情>>
2023-05-04 10:21:02新手速来!几步带你掌握MyBatis Plus
Mybatis-Plus(简称MP)是一款Mybatis的增强工具,它是在Mybatis的基础上实现的简化开发工具。Mybatis-Plus给我们提供了开箱即用的CRUD操作、自动...详情>>
2023-04-28 10:57:09学习java需要什么基础?基础知识有哪些?
网络编程:了解基本的网络编程概念和协议,熟悉 Java 网络编程 API。建议在学习 Java 之前,先学习一些基础的编程语言,如 C 或 Python 等,这...详情>>
2023-04-28 10:41:14