手写spring之Ioc、DI实现(一)

代码整体结构如图

在这里插入图片描述
基本思路流程:

一、new ApplicationContext() 读取配置文件 获取全类名list

BeanDefinitionReader工具类:

1.读取xml中配置的文件 Properties读取成键值对形式 获取scanPackage 

2.向下递归扫描出.class结尾的文件放入全类名list

二、扫描子类及其实现的接口(接口的值用子类值存储),封装得到BeanDefinitionList集合

1.doLoadBeanDefinitions()遍历全类名list 将beanName和beanClassName封装成BeanDefinition对象并放入BeanDefinitionList集合中

三、存入BeanDefinitionMap集合

1.遍历BeanDefinitionList集合,将对象id名和BeanDefinition对象存入map集合

四、实例化对象放入ioc 并初始化属性值

1.遍历map,循环调用getBean(),通过反射获取对象并做个二级缓存在Map,将对象封装成BeanWrapper(bean,class)

2.再将BeanWrapper缓存到ioc集合中

3.DI操作,判断是不是加了@YService或@YController注解,加了就获取属性,遍历属性,加了@YAutowired注解就给属性赋值

五、初始化handleMapping,将url和menthod一一对应

1.定义一个handleMapping的map集合

2.调用ApplicationContext中的getBeanDefinitionNames()方法获取对象名,根据对象的class对象判断是否有@YController注解

3.判断是否有@YRequestMapping注解,有url值的话则获取baseUrl

4.反射获取对象中所有方法,判断方法上是否有@YRequestMapping注解,获取其url值,和baseUrl一起拼接成一个uri,将其和method一起放入handleMapping集合

------------------至此init初始化阶段完成,进入service方法----------

1.获取请求的url和项目名称,得到uri

2.判断handle集合中是否有这个uri,没有就404,有则取出其method

3.根据method获得对象名,获取请求的参数执行invoke方法

完整代码发布在github:https://github.com/yangzhenyan/spring_ioc.git

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值