(一)Spring核心-IoC容器的依赖注入

依赖注入的过程是用户第一次向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的属性进行依赖注入时,解析的过程也是一个递归的过程。

依赖注入的时序

(一)Spring核心-IoC容器的依赖注入_第1张图片

你可能感兴趣的:(spring技术内幕读书笔记)