IOC容器的依赖注入

来源:互联网 发布:数码兽传说 网络侦探pc 编辑:程序博客网 时间:2024/05/17 08:35

4. IOC容器的依赖注入

 

通常依赖注入的过程是用户第一次向IOC容器索要Bean时触发的。通过getBean()

P54 代码清单2-22

方法,触发依赖注入。


 

getBean()只是一个方法的入口,真正执行的时doGetBean()方法。在这个方法中,会通过createBean方法创建Singletonbean的实例。在这个过程中,Bean对象会依据BeanDefinition定义的要求生成。具体的执行过程是在doCreateBean()方法中执行的。通过BeanWrapper对象来持有创建出来的Bean对象。

 

与依赖注入相关的方法有createBeanInstance(P61 代码清单2-24)popularBean(P63 代码清单2-27),在createBeanInstance中生成了Bean所包含的java对象,这个对象的生成方法有很多不同的方法。


这里使用的CGLIBBean进行实例化,CGLIB是一个常用的字节码生成器的类库,它提供了一系列的API来提供生成和转换java的字节码的功能。

                                                          

完成Bean对象的依赖关系的设置,进而完成整个依赖注入的过程,这个过程涉及到对各种bean对象的属性的处理过程(即依赖关系处理的过程),这些依赖的关系处理的依据就是已经解析得到的BeanDefinition。这些工作交由populateBean方法完成。通过applyPropertyValues对属性行进行解析,然后进行注入。

 

接下来具体解析applyPropertyValues方法

通过使用BeanDefinitionResolver来对BeanDefinition进行解析(P66 2-28P67 2-29)。在完成解析之后,已经为依赖注入准备好了条件,通过BeanWrapper中的setPropertyValuesP70 2-30进行实现。

 

总结,在Bean的创建和对象的依赖注入的过程中,需要依据BeanDefinition中的信息来递归完成依赖注入。依赖注入有两个方面:一个是查找需要的Bean和创建Bean的递归调用。另一个是在依赖注入时,通过递归调用容器的getBean方法,得到当前Bean的依赖Bean,同时也触发对依赖Bean的创建和注入。在对Bean的属性进行依赖注入时,解析的过程也是一个递归的过程。

原创粉丝点击