手把手教你写一个 spring IOC 容器
摘要: 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 属性,如果没有,则无法传值。
第三,那么参数初始化,是不是也有一点问题呢?注意这段代码,传参的名字应该和什么相关?
好了 现在真的可以成功了~~~
看看结果吧。
完结撒花~~~
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/af1fc83a9cee1de93df01b7b3】。文章转载请联系作者。
评论