优化基于xml的Spring项目配置文件
说明
- 对Spring博客集里(指Spring 02)基于xml的Spring接管下的三层项目构建进行优化改造,实现配置文件的拆分和整合
- Spring中xml文件的头文件信息和beans标签内容如下,不再赘述,之后只说明核心标签的内容
<?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">
<!-- 核心标签 -->
</beans>
配置文件拆分
原因
- 当项目规模越来越大,需要多人合作开发,核心配置文件只有一个的话,存在很大隐患
- 隐患简单举例:配置文件越来越大,修改时内容查找困难,可能被他人误改,维护困难等
拆分方式1: 按层拆
- applicationContext_controller.xml:界面层核心配置文件
<bean id="userController" class="com.example.controller.UserController"/>
<bean id="bookController" class="com.example.controller.BookController"/>
- applicationContext_service.xml:业务逻辑层核心配置文件
<bean id="userService" class="com.example.service.UserServiceImpl"/>
<bean id="bookService" class="com.example.service.BookServiceImpl"/>
- applicationContext_mapper.xml:数据访问层核心配置文件
<bean id="userMapper" class="com.example.dao.UserMapperImpl"/>
<bean id="bookMapper" class="com.example.dao.BookMapperImpl"/>
拆分方式2: 按功能拆
- applicationContext_user.xml:用户类核心配置文件
<bean id="userController" class="com.example.controller.UserController"/>
<bean id="userService" class="com.example.service.UserServiceImpl"/>
<bean id="userMapper" class="com.example.dao.UserMapperImpl"/>
- applicationContext_book.xml:图书类核心配置文件
<bean id="bookController" class="com.example.controller.BookController"/>
<bean id="bookService" class="com.example.service.BookServiceImpl"/>
<bean id="bookMapper" class="com.example.dao.BookMapperImpl"/>
整合方式1: 单文件导入
原核心配置文件
- 只有applicationContext.xml
<!-- 注册UserMapper实现类对象-->
<bean id="uMapperImpl" class="com.example.dao.UserMapperImpl">
</bean>
<!-- 注册UserService实现类对象-->
<bean id="uServiceImpl" class="com.example.Service.impl.UserServiceImpl">
<property name="userMapper" ref="uMapperImpl"/>
</bean>
<!-- 注册UserController对象-->
<bean id="uController" class="com.example.controller.UserController">
<property name="userService" ref="uServiceImpl"/>
</bean>
按层拆分
- applicationContext_mapper.xml
<!-- 注册UserMapper实现类对象-->
<bean id="uMapperImpl" class="com.example.dao.UserMapperImpl">
</bean>
- applicationContext_controller.xml
<!-- 注册UserController对象-->
<bean id="uController" class="com.example.controller.UserController">
<property name="userService" ref="uServiceImpl"/>
</bean>
- applicationContext_service.xml
<!-- 注册UserService实现类对象-->
<bean id="uServiceImpl" class="com.example.Service.impl.UserServiceImpl">
<property name="userMapper" ref="uMapperImpl"/>
</bean>
整合
- 新建total.xml,用来整合上述拆分后的配置文件
<!-- 单个导入拆分后的配置文件 -->
<import resource="applicationContext_mapper.xml"/>
<import resource="applicationContext_controller.xml"/>
<import resource="applicationContext_service.xml"/>
注意
- 拆分后的配置文件和整合文件的位置
- 拆分后的配置文件中出现了报红现象,说找不到引用的类型:idea编译检查级别较高,项目实际可以正常运行,这里的报红可以不管
整合方式2: 批量文件导入
整合
- 通过通配符完成批量导入
<!-- 批量导入拆分后的配置文件 -->
<import resource="applicationContext_*.xml"/>
测试
- 对基于xml的Spring接管下的三层项目构建进行配置文件的拆分和整合后的测试(此时拆分文件还报着红)
- 创建Spring容器时读取整合文件total.xml即可
package com.example.test;
import com.example.controller.UserController;
import com.example.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestInsert {
//测试Spring接管下的简单三层架构
@Test
public void testInsertUser(){
//创建Spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("total.xml");
//取出界面层对象
UserController uController = (UserController) applicationContext.getBean("uController");
//调用界面层对象方法
int num = uController.insertUser(new User("荷包蛋", 20, "黑河"));
if(num == 1){
System.out.println("Spring接管下的简单三层架构,运行成功!");
}else{
System.out.println("Spring接管下的简单三层架构,运行失败!");
}
}
}
测试输出
- 项目正常运行,配置文件报红在这里是因为idea编辑检测等级较高,没有检测到其他配置文件中注册的实体类对象,所以报红。但是total.xml后期会整合配置文件,不会出错
用户: 荷包蛋, 导入成功!
Spring接管下的简单三层架构,运行成功!
Process finished with exit code 0
优化基于注解的Spring项目配置文件
说明
- 对Spring博客集里(指Spring 05)DI优化后的Spring接管下的三层项目构建(基于注解的)进行优化改造,实现配置文件的拆分和整合
原先配置文件
- 只有一个applicationContext.xml
<!-- 分别添加包扫描 -->
<context:component-scan base-package="com.example.controller"/>
<context:component-scan base-package="com.example.Service"/>
<context:component-scan base-package="com.example.dao"/>
拆分方式:按层拆分
- applicationContext_controller.xml:界面层核心配置文件
<!-- 添加包扫描 -->
<context:component-scan base-package="com.example.controller"/>
- applicationContext_service.xml:业务逻辑层核心配置文件
<!-- 添加包扫描 -->
<context:component-scan base-package="com.example.Service"/>
- applicationContext_mapper.xml:数据访问层核心配置文件
<!-- 添加包扫描 -->
<context:component-scan base-package="com.example.dao"/>
整合方式:批量文件导入
- 通过通配符完成批量导入
<!-- 批量导入配置文件 -->
<import resource="applicationContext_*.xml"/>
项目结构和配置文件位置
测试
- 经过配置文件拆分和整合后的DI优化的Spring接管下的三层项目架构的测试
package com.example.test;
import com.example.controller.UserController;
import com.example.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestInsert {
//测试:注解改造后的Spring接管下的简单三层架构
@Test
public void testInsertUser(){
//创建Spring容器
ApplicationContext ac= new ClassPathXmlApplicationContext("total.xml");
//从容器中获取UserController对象
UserController uc = (UserController) ac.getBean("userController");
//完成用户数据的导入
uc.insertUser(new User("荷包蛋", 20, "黑河"));
}
}
测试输出
用户: 荷包蛋, 导入成功!
Process finished with exit code 0
相关文章
暂无评论...