spring 依赖注入源码,AOP源码

Aop 代码:

http://www.goldendoc.org/2010/12/spring_aop/

依赖注入代码

http://blog.csdn.net/qian_348840260/article/details/8004440

读完代码后的理解:

1. 在获取bean时候,先判断是否是single类型,并从缓存中获取。如果没有此类信息,继续向下

2.   获取parent factory,如果找不到这个类的定义,那么委托给parent factory处理。

3. 获取原始类的信息,查看类信息直接的depdence关系,先处理依赖的类。

4. 判断类的类型:single/prototype/scope,分别去创建bean 调用createBean。

5. 在createbean时候需要先进行处理,方法Overrides以及如果实现了接口BeanPostProcessors ,会调用相应的bean初始化之前的处理(bean的生命周期包含这个步骤)。

6.doCreateBean,主要是创建BeanWrapper 然后进行populate 。

7.通过createBeanInstance创建beanwrapper,包含工厂方法,构造函数,以及无参构造函数来初始化这个bean。

8.初始化bean包含了对应的策略,采用什么反射机制,jdk or cglib

9.populate bean之前还要做处理,如果bean实现了接口BeanPostProcessors 以及adwareBeanPostProcessors , 还要调用相应的方法 在bean正式设置属性之前。还要检查自动装配的类属性

10.开始进行applyPropertyValues:

  1)判断属性是否是可变属性,属性是否已经做了转化,如果转化直接set。

  2)如果不是mutable属性,那么获得这些属性的list

  3)通过BeanDefinitionValueResolver 来解决这个list

  4)遍历这个list,如果属性已经是convered的,那么做记录保存,否则通过BeanDefinitionValueResolver的方  法resolveValueIfNecessary 来处理

  5)这个resolveValueIfNecessary 方法中对value做了判断:RuntimeBeanReference,RuntimeBeanNameReference,以及BeanDefinition,string,set,map等,不同情况,不同处理。

猜你喜欢

转载自tianlijia202.iteye.com/blog/1871447