写点什么

手把手教你写一个 spring IOC 容器

发布于: 2021 年 04 月 08 日

摘要: spring 框架的基础核心和起点毫无疑问就是 IOC,IOC 作为 spring 容器提供的核心技术,成功完成了依赖的反转:从主类的对依赖的主动管理反转为了 spring 容器对依赖的全局控制。今天就带大家手写一个 spring IOC 容器。


本文分享自华为云社区《手把手教你写一个springIOC容器》,原文作者:技术火炬手。

 

spring 框架的基础核心和起点毫无疑问就是 IOC,IOC 作为 spring 容器提供的核心技术,成功完成了依赖的反转:从主类的对依赖的主动管理反转为了 spring 容器对依赖的全局控制。今天就带大家手写一个 spring IOC 容器。


第 0 步(准备工作):

(1)JDK1.8 及 java 环境变量

(2)maven 包及 maven 环境变量

(3)idea


第 1 步(创建项目,引入 tomcat 包)

PS:由于该项目的作用是模拟 spring 的部分功能,所以取名为 spring


(1)创建好的项目内容如下图:



(2)pom 文件的初始状态如下:



​第 2 步:搭建主体框架 PS:一个正常的 spring 项目一般分为 controller 和 service 部分,此处暂时忽略数据库链接



​(1)其中,TestController 实现功能,返回 name+“Hello World!”,引用 TestService



​(2)而 TestService 和 TestServiceImpl 则分别实现功能



​第 3 步:创建,并打上标签 PS:我们需要很多标签,如 service,controller,还有 autowired 等


(1)创建各种标签(暂时创建这些标签,后面不够再加)



​(2)打上标签




​由于 RequestMpping 后面需要跟路径,所以此处需要重写其 value()方法,如下:



​第 4 步:进入正题,创建一个 DisPatcherServlet 类,用于实现 IOC 容器功能


(1)DisPatcherServlet 继承 HttpServlet(注意添加依赖),并重写 doGet,doPost 方法



​(2)创建一个 doDispatcher 方法,并被 doPost 引用



​第 5 步:初始化


(1)暂停实现 doDispatcher,去重写初始化方法 init,初始化共分为五大步骤,如下



​注意:顶端要加上属性类(Properties),且要 resource 中加 application.properties,并加上 scanPackage 属性,内容为需扫描的根目录



​(2)加载配置文件实现,需要先配置一个 web.xml,路径和内容如下:


路径:



​内容:



​剩下的内容,大家应该能看懂的吧



​(3)下一步,使用递归,将所有 class 的路径存入一个集合(classPaths)里面



​(4)下一步,将打上了 controller 和 service 标签的类放入 ioc 容器中



​(5)下一步,注入(通过 Autowired 标签从 IOC 容器中获取实例对象并赋值)



​(6)获取所有的 RequestMapping 内容,并写到一个对象集合中


第 6 步:回头实现 doDisPatcher 的步骤



​(1)首先,设定 404(class notfound)

(2)后面一半,实现接口功能

PS1:判断 url 方法

PS2:根据 url 获取方法

PS3:获取方法下的所有参数

最后一步:执行 tomcat

so,

(1)你以为以上的内容是对的嘛?

(2)你以为你能得到想要的结果吗?

太天真了!!!

如果你按照我说的方法去运行,恭喜你,得到的结果是 not found!!!

真正的挑战才刚刚开始,

第一,标签类的定义,如下,特别重要的是 Target



​还需要补充一个 mapping



​第二,TestController 类中,RequestParam 少了 value 属性,如果没有,则无法传值。



​第三,那么参数初始化,是不是也有一点问题呢?注意这段代码,传参的名字应该和什么相关?



​好了 现在真的可以成功了~~~



看看结果吧。



​完结撒花~~~


点击关注,第一时间了解华为云新鲜技术~

发布于: 2021 年 04 月 08 日阅读数: 29
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
手把手教你写一个spring IOC容器