😀前言
自己实现 SpringMVC 底层机制 系列之–实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml
🏠个人主页:尘觉主页
🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
在csdn获奖荣誉: 🏆csdn城市之星2名
💓Java全栈群星计划top前5
🤗 端午大礼包获得者
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊
文章目录
- 实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml
- 说明:
- 分图析示意
- 修改 WyxWebApplicationContext
- 修改WyxDispatcherServlet.java类
- 完成测试
- 😄总结
实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml
说明:
前面我们加载 wyxspringmvc.xml 是硬编码, 现在做活, 从 web.xml 动态获取
分图析示意
-WyxDispatcherServlet 在创建并初始化 WyxWebApplicationContext,动态的从 web.xml 中获 取到配置文件
修改 WyxWebApplicationContext
public class WyxWebApplicationContext {
//定义属性classFullPathList, 保存扫描包/子包的类的全路径
private List<String> classFullPathList =
new ArrayList<>();
//定义属性ioc, 存放反射生成的Bean对象 /Controller/Service
public ConcurrentHashMap<String, Object> ioc =
new ConcurrentHashMap<>();
//无参构造器
public WyxWebApplicationContext() {
}
private String configLocation;//属性,表示spring容器配置文件
public WyxWebApplicationContext(String configLocation) {
this.configLocation = configLocation;
}
public void init() {
String basePackage =
XMLParser.getBasePackage(configLocation.split(":")[1]);
//这时basePackage => com.wyxdu.controller,com.wyxdu.service
String[] basePackages = basePackage.split(",");
//遍历basePackages, 进行扫描
if (basePackages.length > 0) {
for (String pack : basePackages) {
scanPackage(pack);//扫描
}
}
System.out.println("扫描后的= classFullPathList=" + classFullPathList);
//将扫描到的类, 反射到ico容器
executeInstance();
System.out.println("扫描后的 ioc容器= " + ioc);
}
修改WyxDispatcherServlet.java类
public void init(ServletConfig servletConfig) throws ServletException {
//获取到web.xml中的 contextConfigLocation
/*
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:wyxspringmvc.xml</param-value>
</init-param>
*/
String configLocation =
servletConfig.getInitParameter("contextConfigLocation");
//创建自己的spring容器
wyxWebApplicationContext =
new WyxWebApplicationContext(configLocation);
wyxWebApplicationContext.init();
//调用 initHandlerMapping , 完成url和控制器方法的映射
initHandlerMapping();
//输出handlerList
System.out.println("handlerList初始化的结果= " + handlerList);
}
完成测试
(启动 tomcat 方式, 修改后,redeploye 即可)
😄总结
本篇完成了实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml下面就是
实现任务阶段 4- 完成自定义@Service 注解功能
😉自己实现 SpringMVC 底层机制 核心分发 控制器+ Controller 和 Service 注入容器 + 对象自动装配 + 控制器 方法获取参数 + 视图解析 + 返回 JSON 格式数系列
第一篇->自己实现 SpringMVC 底层机制 系列之搭建 SpringMVC 底层机制开发环境和开发 WyxDispatcherServlet_springmvc分发器
第二篇->自己实现 SpringMVC 底层机制 系列之–实现任务阶段 2- 完成客户端浏览器可以请求控制层
😁热门专栏推荐
想学习vue的可以看看这个
java基础合集
数据库合集
redis合集
nginx合集
linux合集
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持
🤔欢迎大家加入我的社区 尘觉社区
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞