(一)Spring核心-IoC容器的依赖注入
2018-03-28 18:55
489 查看
依赖注入的过程是用户第一次向IoC容器索要Bean时触发的,也就是由DefaultListableBeanFactory中的getBean()这个方法触发的。具体的实现是在AbstractBeanFactory中的doGetBean()这个方法中。如果在当前的工厂中取不到Bean,就到双亲BeanFactory中取,如果当前双亲工厂取不到,就顺着双亲BeanFactory链一直向上查找,再获取当前Bean的所有依赖Bean,触发getBean的递归调用,直到取得一个没有任何依赖的Bean为止。在doGetBean()方法中会调用AbstractAutowireCapableBeanFactory的createBean()方法去实例化对象,具体的实例化过程又调用了SimpleInstantiationStrategy的instantiate()方法,实现了两种实例化方法,一个Gglib,一个反射。这个过程中对对象的属性的处理过程是在AbstractAutowireCapableBeanFactory的populateBean()方法中。
真正的解析过程是在BeanDefinitionResolver中实现的,在resolveRefrence中,把Bean对象设置到它所依赖的另一个Bean属性中去,具体是通过BeanWrapper的实现类BeanWrapperImpl的setPropertyValues实现。
在Bean的创建和对象依赖注入过程中,需要依据BeanDefinition中的信息来递归地完成依赖注入。这些递归都是以getBean为入口的。一个递归是在上下文体系中查找需要的Bean和创建Bean的递归调用;另一个递归是在依赖注入时,通过递归调用容器的getBean方法,得到当前Bean的依赖Bean,同时也触发对依赖Bean的创建和注入。在对Bean的属性进行依赖注入时,解析的过程也是一个递归的过程。
依赖注入的时序
真正的解析过程是在BeanDefinitionResolver中实现的,在resolveRefrence中,把Bean对象设置到它所依赖的另一个Bean属性中去,具体是通过BeanWrapper的实现类BeanWrapperImpl的setPropertyValues实现。
在Bean的创建和对象依赖注入过程中,需要依据BeanDefinition中的信息来递归地完成依赖注入。这些递归都是以getBean为入口的。一个递归是在上下文体系中查找需要的Bean和创建Bean的递归调用;另一个递归是在依赖注入时,通过递归调用容器的getBean方法,得到当前Bean的依赖Bean,同时也触发对依赖Bean的创建和注入。在对Bean的属性进行依赖注入时,解析的过程也是一个递归的过程。
依赖注入的时序
相关文章推荐
- Spring应用、原理以及粗读源码系列(一)--框架总述、以Bean为核心的机制(IoC容器初始化以及依赖注入)
- Spring系列之-Spring IOC容器设计:依赖注入设计
- Ioc容器依赖注入-Spring 源码系列(2)
- Ioc容器依赖注入-Spring 源码(2)
- 浅谈Spring IoC容器的依赖注入原理
- Spring容器的控制反转(IOC)和依赖注入(DI)
- SpringIOC容器创建对象及依赖注入的几种方式
- Spring的IOC容器—依赖注入
- Spring IOC源码详解之容器依赖注入
- Spring源码学习IOC(5):IOC容器的依赖注入
- Spring源码阅读(三)—IOC容器依赖注入
- spring技术内幕笔记:IoC容器的依赖注入
- Spring核心机制--依赖注入IOC
- Spring的核心机制:依赖注入,也是IoC(控制反转)
- 【Spring源码--IOC容器的实现】(六)Bean的依赖注入
- spring——(1)ioc容器和Di依赖注入
- spring IOC容器的初始化和依赖注入
- Spring:源码解读(IOC容器的依赖注入)
- spring容器中的依赖注入和ioc那些事
- Spring源码解析三:IOC容器的依赖注入