摘要:spring框架的根底外围和终点毫无疑问就是IOC,IOC作为spring容器提供的核心技术,胜利实现了依赖的反转:从主类的对依赖的被动治理反转为了spring容器对依赖的全局管制。明天就带大家手写一个spring IOC容器。
本文分享自华为云社区《手把手教你写一个spring IOC容器》,原文作者:技术火炬手。
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属性,如果没有,则无奈传值。
第三,那么参数初始化,是不是也有一点问题呢?留神这段代码,传参的名字应该和什么相干?
好了 当初真的能够胜利了~~~
看看后果吧。
完结撒花~~~
点击关注,第一工夫理解华为云陈腐技术~