bean的加载

MyTestBean bean=(MyTestBean) bf.getBean(“meTestBean”);

getBean方法的doGetBean

方法里包含:

1.存在缓存

(1)getSingleton方法:缓存中获取单例bean

     SingletonObjects:一级缓存,先从此中获取实例

     earlySingletonObjects:二级缓存,如果一级缓存获取不到实例,再从此种获取实例

     singletonFactories:三级缓存,如果二级缓存获取不到实例,再从此种获取实例

(2)getObjectForBeanInstance方法:从bean的实例中获取对象

     对FactoryBean正确性的验证。

     对非FactoryBean不做任何处理。

     对bean进行转换。

     将从Factory中解析bean的工作委托给GetObjectFromFactoryBean.

     GetObjectFromFactoryBean:返回的bean如果是单例的,那就必须要保证全局唯一,同时因为是单例的,所以不必重复创建,可以使用缓存来提高性能。

     doGetObjectFromFactoryBean方法:

     factory.getObject();

     postProcessObjectFromFactoryBean

2.无缓存:

(1)getSingleton方法:检查缓存是否已经加载过,若没有加载,则记录beanName的正在加载状态。

     beforeSingletonCreation:加载单例前记录加载状态.

     singletonFactory.getObject();:实例化bean

     afterSingletonCreation:加载单例后处理方法调用,即移除缓存中对该bean正在加载状态的记录。

     addSingleton:将结果记录至缓存并删除加载bean过程中所记录的各种辅助状态。

3.准备创建bean

  CreateBean方法:

   resolveBeanClass:根据设置的class属性或者根据className来解析Class.

   mbd.prepareMethodOverrides:验证及准备覆盖的方法。对Override属性进行标记及验证。

   resolveBeforeInstantiation:给beanProcessors一个机会来返回代理来替代真正的实例。应用初始化前的后处理器,解析指定bean是否存在初始化前的短路操作。

   docreateBean:创建bean

循环依赖

4.创建bean

docreateBean方法:

(1)createBeanInstance方法:

  AutowireConstructor:带参数构造函数实例化

  instantiateBean:不带参数构造函数实例化

  循环依赖检查。

(2)populateBean方法:

InstantiationAwareBeanPostProcessor处理器的postProcessAfterInstantiation函数的应用,此函数可以控制程序是否继续进行属性填充。

autowireByName:属性注入(根据名称自动注入)

autowireByType:属性注入(根据类型自动注入)

InstantiationAwareBeanPostProcessor处理器的postProcessPropertyValues方法,对属性获取完毕填充前对属性的再次处理。

ApplyPropertyValues:将所有propertyValues中的属性填充至BeanWrapper.

(3)initializeBean:调用用户设置的初始化方法。

(4)registerDisposableBeanIfNecessary:注册后处理器来统一处理bean的销毁方法。

转载于:https://my.oschina.net/yangfeima/blog/875829

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值