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

华为云开发者社区 2021-04-08 11:05:57
教你 手把手 手把 把手 一个


摘要:spring框架的基础核心和起点毫无疑问就是IOC,IOC作为spring容器提供的核心技术,成功完成了依赖的反转:从主类的对依赖的主动管理反转为了spring容器对依赖的全局控制。今天就带大家手写一个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属性,如果没有,则无法传值。

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

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

看看结果吧。

完结撒花~~~

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

 

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

版权声明
本文为[华为云开发者社区]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/huaweiyun/p/14631100.html

  1. SCIP: constructing data abstraction -- Explanation of queue and tree in data structure
  2. Spring cloud + Nacos to implement service registry (Hoxton version)
  3. Installation and upgrade of rabbitmq server
  4. Lei Jun: Xiaomi's spring conference has been largely streamlined, which will take at least four hours. Some products will be directly released on Weibo
  5. IntelliJ IDEA 2021最新激活码(亲测有效,可激活至 2089 年)
  6. java版本spring cloud+spring boot+mybatis 分布式商城 微服务商城 多租户商城 电子商务 直播带货商城 社交电商
  7. win10安装Redis5.0
  8. (十五)springboot电子商务商城之SpringCloud-使用Eureka集群搭建实现高可用服务注册中心
  9. (十四)springboot电子商务商城之SpringCloud-Eureka自我保护模式和InstanceID的配置
  10. 花生壳内网穿透(Linux版)
  11. Docker部署elasticsearch(单机)
  12. (十三)springboot电子商务商城之SpringCloud-使用Eureka集群搭建实现高可用服务注册中心
  13. (十二)springboot电子商务商城之Eureka注册中心开启密码认证
  14. 七、Spring Boot 集成 Thymeleaf 模板引擎
  15. mysql 命令行秒复制数据库
  16. Windows安装Mysql(msi 图形安装)
  17. The latest activation code of IntelliJ idea 2021
  18. Java应用全链路启动速度提升至15s,阿里云SAE能力再升级
  19. Linux基础命令
  20. Who moved your red envelope? Risk control report of 2021 spring festival activities
  21. Java version spring cloud + spring boot + mybatis distributed mall micro Service Mall multi tenant mall e-commerce live delivery mall social E-commerce
  22. Java 任意音频转MP3
  23. Docker 的 DNS
  24. Docker-搭建日志监控系统
  25. ssm+mysql+maven+shiro进销存系统wms
  26. Installing redis5.0 on win10
  27. (15) Springcloud of springboot E-commerce mall - using Eureka cluster to build and implement high availability service registry
  28. (14) Springcloud Eureka self protection mode and instanceid configuration of springboot E-commerce mall
  29. Peanut shell intranet penetration (Linux version)
  30. Deploying elastic search with docker (stand alone)
  31. (13) Springcloud of springboot E-commerce mall - using Eureka cluster to build and implement high availability service registry
  32. (12) Eureka registry of springboot E-commerce mall opens password authentication
  33. 爱上 Java 的10 大理由!
  34. 7、 Spring boot integrates thymeleaf template engine
  35. 【DB宝41】监控利器PMM的使用--监控MySQL、PG、MongoDB、ProxySQL等
  36. 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡
  37. MySQL command line second replication database
  38. Windows installation of MySQL (MSI graphic installation)
  39. The full link startup speed of Java applications has been increased to 15s, and the SAE capability of alicloud has been upgraded again
  40. Java 学生成绩管理系统课程设计,附源码!
  41. Linux basic command
  42. Java arbitrary audio to MP3
  43. DNS of docker
  44. Docker - build log monitoring system
  45. SSM + MySQL + Maven + Shiro WMS
  46. Top 10 reasons to fall in love with java!
  47. 一本关于HTTP的恋爱日记
  48. 【RocketMQ源码分析】深入消息存储(3)
  49. SpringCloud+Nacos实现服务配置中心(Hoxton版本)
  50. SCIP:构造数据抽象--数据结构中队列与树的解释
  51. SCIP:构造过程抽象--面向对象的解释
  52. 使用 docker 进行 ElasticSearch + Kibana 集群搭建
  53. Spring IOC 特性有哪些,不会读不懂源码!
  54. [DB Bao 41] use of PMM -- monitoring mysql, PG, mongodb, proxysql, etc
  55. Spring Cloud 升级之路 - 2020.0.x - 3. Undertow 的 accesslog 配置
  56. [DB Bao 42] MySQL high availability architecture MHA + proxysql realizes read-write separation and load balancing
  57. [DataGuard] recovery of physical DG in case of losing archive files in main database (7)
  58. MyBatis(3)Map和模糊查询拓展
  59. 【TTS】AIX->Linux--基于RMAN(真实环境)
  60. 【TTS】传输表空间AIX->linux基于rman