码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 自己实现 SpringMVC 底层机制 系列之--实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml


    😀前言
    自己实现 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 动态获取

    分图析示意

    img

    -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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    修改WyxDispatcherServlet.java类

     public void init(ServletConfig servletConfig) throws ServletException {
    
            //获取到web.xml中的 contextConfigLocation
            /*
             
              contextConfigLocation
              classpath:wyxspringmvc.xml
            
             */
            String configLocation =
                    servletConfig.getInitParameter("contextConfigLocation");
    
            //创建自己的spring容器
            wyxWebApplicationContext =
                    new WyxWebApplicationContext(configLocation);
    
            wyxWebApplicationContext.init();
            //调用 initHandlerMapping , 完成url和控制器方法的映射
            initHandlerMapping();
            //输出handlerList
            System.out.println("handlerList初始化的结果= " + handlerList);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    完成测试

    (启动 tomcat 方式, 修改后,redeploye 即可)

    image-20230820094444603

    😄总结

    本篇完成了实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml下面就是
    实现任务阶段 4- 完成自定义@Service 注解功能

    😉自己实现 SpringMVC 底层机制 核心分发 控制器+ Controller 和 Service 注入容器 + 对象自动装配 + 控制器 方法获取参数 + 视图解析 + 返回 JSON 格式数系列

    第一篇->自己实现 SpringMVC 底层机制 系列之搭建 SpringMVC 底层机制开发环境和开发 WyxDispatcherServlet_springmvc分发器

    第二篇->自己实现 SpringMVC 底层机制 系列之–实现任务阶段 2- 完成客户端浏览器可以请求控制层

    第三篇->自己实现 SpringMVC 底层机制 系列之–实现任务阶段 3- 从 web.xml动态获取 wyxspringmvc.xml

    第四篇-> 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 4- 完成自定义@Service 注解功能

    第五篇-> 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 5- 完成 Spring 容器对象的自动装配 -@Autowried

    第六篇->自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-@RequestParam

    第七篇->自己实现 SpringMVC 底层机制 系列之-实现任务阶段 7- 完成简单视图解析

    第八篇->自己实现 SpringMVC 底层机制 系列之-实现任务阶段 8- 完成返回 JSON 格式数据-@ResponseBody

    😁热门专栏推荐
    想学习vue的可以看看这个

    java基础合集

    数据库合集

    redis合集

    nginx合集

    linux合集

    等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

    🤔欢迎大家加入我的社区 尘觉社区

    文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
    希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
    如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

  • 相关阅读:
    javascript中的继承
    Nacos Linux & Windows安装
    leetcode 第 364 场周赛
    Java 后端开发面试总结【25 个技术专题】
    50mm镜头对20m外标定板成像实验
    JavaWeb-EL表达式
    spring MVC基础步骤
    渗透测试学习day3
    【MySQL】深入解析 Buffer Pool 缓冲池
    学习MySQL必须掌握的13个关键字,你get了吗?
  • 原文地址:https://blog.csdn.net/apple_67445472/article/details/132395230
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号