Spring 06: Spring项目配置文件的拆分和整合

2年前 (2022) 程序员胖胖胖虎阿
274 0 0

优化基于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"/>

注意

  • 拆分后的配置文件和整合文件的位置

Spring 06: Spring项目配置文件的拆分和整合

  • 拆分后的配置文件中出现了报红现象,说找不到引用的类型:idea编译检查级别较高,项目实际可以正常运行,这里的报红可以不管

Spring 06: Spring项目配置文件的拆分和整合

整合方式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"/>

项目结构和配置文件位置

Spring 06: Spring项目配置文件的拆分和整合

测试

  • 经过配置文件拆分和整合后的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
版权声明:程序员胖胖胖虎阿 发表于 2022年11月23日 下午7:40。
转载请注明:Spring 06: Spring项目配置文件的拆分和整合 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...