目录
(2)修改applicationContext_mapper.xml——>UserMapperImpl没有可引用的成员变量,不用提供setterXXX方法
(3)修改UserServiceImpl——>提供setterXXX方法
(4)修改UserController——>提供setterXXX方法
(2)运行结果(模拟的功能,真实开发,须与Mybatis+MySQL搭配,获取表真实存在数据)
本章学习源码Github地址:https://github.com/GuiZhouAndroid/MySpringAllProject/tree/master/SpringDemo03_YES_IOC_SET_XML_MVC
一、前言
(1)拆分多个Spring配置文件策略——>按层拆
原理:创建3个且命名不同的applicationContext配置文件,各自对应代表MVC其中一层,所以类对象集中管理和注入。再创建1个applicationContext配置文件汇总在一起,外部只需要加载此汇总的配置文件即可完成Spring框架的IOC。如下:
totalContext.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 单个Spring的applicationContext文件导入 -->
<import resource="applicationContext_mapper.xml"/>
<import resource="applicationContext_service.xml"/>
<import resource="applicationContext_controller.xml"/>
<!-- 批量导入Spring的applicationContext文件 -->
<import resource="applicationContext_*.xml"></import>
</beans>
外部调用totalContext.xml
//1.创建容器并启动加载bean对象
ApplicationContext ac = new ClassPathXmlApplicationContext("totalContext.xml");
二、开始改造
(1)项目结构——>在上一节的基础上改动
(2)修改applicationContext_mapper.xml——>UserMapperImpl没有可引用的成员变量,不用提供setterXXX方法
<?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">
<!-- 创建各种需要容器管理的对象 -->
<!-- 1.创建数据访问层的对象 -->
<bean id="uMapper" class="com.dhrj.java.zsitking.dao.impl.UserMapperImpl"/>
</beans>
(3)修改UserServiceImpl——>提供setterXXX方法
public class UserServiceImpl implements UserService {
// 在所有业务逻辑层中都必定有数据访问层的对象
private UserMapper userMapper;//new UserMapperImpl();
//提供setter()方法交由Spring容器beans工厂(totalContext.xml)管理数据访问层的对象
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Override
public int addUser(User user) {
return userMapper.addUser(user);
}
}
修改对应的applicationContext_service.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 创建各种需要容器管理的对象 -->
<!-- 2.创建业务逻辑层的对象 -->
<bean id="uService" class="com.dhrj.java.zsitking.service.impl.UserServiceImpl">
<property name="userMapper" ref="uMapper"></property>
</bean>
</beans>
(4)修改UserController——>提供setterXXX方法
public class UserController {
// 在所有界面层中都必定有业务逻辑层的对象
private UserService userService ;//= new UserServiceImpl();
//提供setter()方法交由Spring容器beans工厂(totalContext.xml)管理业务逻辑层的对象
public void setUserService(UserService userService) {
this.userService = userService;
}
/**
* 界面层的功能实现,对外提供访问的功能
*
* @param user 待添加的用户信息
* @return 添加结果
*/
public int addUser(User user) {
return userService.addUser(user);
}
}
修改对应的applicationContext_controller.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 创建各种需要容器管理的对象 -->
<!-- 3.创建界面层的对象 -->
<bean id="uController" class="com.dhrj.java.zsitking.controller.UserController">
<property name="userService" ref="uService"></property>
</bean>
</beans>
说明:applicationContext_controller.xml + applicationContext_service.xml 注入引用类型时会提示报红错误——>只是IDEA扫描不到而已,但Spring配置文件分层与合并策略是生效的,不影响使用。
三、测试功能
(1)测试代码
/**
* created by on 2022/6/7
* 描述:测试三层架构搭建的项目
*
* @author ZSAndroid
* @create 2022-06-07-14:43
*/
public class MyTest {
@Test
public void test01() {
//1.创建容器并启动加载bean对象
ApplicationContext ac = new ClassPathXmlApplicationContext("totalContext.xml");
//2.取出对象
UserController uController = (UserController) ac.getBean("uController");
//3.测试对象功能
System.out.println(uController.addUser(new User(1998, "张松", 24)));
}
}
(2)运行结果(模拟的功能,真实开发,须与Mybatis+MySQL搭配,获取表真实存在数据)
四、总结
仅自己学习记录,如有错误,敬请谅解~,谢谢~~~