01_手写SpringIOC思路

文章目录

  • 手写Spring之IOC思路整理

手写Spring之IOC思路整理

先说说老生常谈的东西,关于IOC的理解:

1、Spring管理对象 IOC就是控制反转,Spring之前,我们都是自己控制对象的(new)。 用了Spring就是,把整个对象交给Spring控制管理。

2、Spring依赖注入 DI 依赖注入,将对应的属性值,注入到对应的对象里。通过注解,@AutowiredpopulateBean完成注入。

3、String容器 存储对象,使用map结构,一般三级缓存(解决循环依赖问题),singletonObjects存完整Bean对象。 Bean从创建到销毁的过程,都是由容器来完成的。容器管理Bean的整个生命周期。

手写Spring IOC的思路:

  • 1.项目启动,解析applicationContex.xml文件,解析XML最常见的方式:Do4J工具 : com.bones
  • 2.递归扫描com.bruceliu包(com/bones/)下:所有的class文件 com.bones.service.impl.xxx.class 存入集合中
  • 3.根据class路径获取类的全路径 com.bones.service.impl.xxx、com.bones.service.xxx、com.bones.controller.xxx
  • 4.获取所有的class全路径,循环判断(反射)这个类是否有 @Controller注解、@Service注解,如果类上有类似上述注解,以为这个类需要反射对象,
  • 然后把对象存入IOC的集合中(ConcurrentHashMap 线程安全)
  • 5.遍历全路径的类,反射这个类中的属性,使用反射检测属性上是否有@Autowired注解或者@Resource,如果有那么就需要进行属性注入,按照类型匹配或者名字匹配
  • 如果匹配到多个抛异常,如果匹配到0个也抛异常
  • 6.对外提供一个获取IOC容器对象的API,context.getBean(OrderController.class)

如果简单了解过Spring的源码,基本就是下面的流程:

1、IOC里容器很关键,容器的创建过程大概就是,应用 beanFactory(接口,没有具体实现的),DefaultListableBeanFactory,向bean工厂设置一些参数BeanPostProcessorAware接口的子类等属性。

2、加载解析Bean,创建bean对象的定义对象beanDefintion(xml或者注解的解析过程)

3、beanFactoryPostProcessor的处理,Spring有很多的扩展方法, PlaceHolderConfigurSuppor,ConfigrurationClassPostProcessor

4、BeanDefintion对象实力化成具体的bean对象,通过反射的方式。

5、bean对象初始化过程(填充属性-调用aware子类,调用BeanPostProcessor前置处理方法,调用init-method方法,调用BeanPostProcessor后置处理方法)

6、生成Bean,通过getBean获取。

7、销毁

你可能感兴趣的:(spring,java,spring,mybatis)