Spring获取bean的步骤

1 处理&问题
2 去chache里找
3 处理对象A依赖对象B的问题
4 生成bean
  4.1 处理方法注入 ------lookup-method
  4.2 如果类实现了InstantiationAwareBeanPostProcessor接口就调用其postProcessBeforeInstantiation,如果返回值不为null就调用postProcessAfterInitialization方法,如果还是不为null就返回,省略后面的doCreatBean方法(等于短路了后面),如果postProcessBeforeInstantiation返回的就是null,那就继续往下走,看doCreateBean
  4.3 doCreatBean
      4.3.1 处理工厂方法 factory-method
      4.3.2 允许Annotation修改bean 例如 @resource
      4.3.3 处理循环依赖
4.3.4 调用postProcessAfterInitialization方法,如果返回false,程序就直接返回 等于短路后续的操作
4.3.5 处理 @Autowire
4.3.6 属性注入 @resource
4.3.7 类型转换 调用InstantiationAwareBeanPostProcessor的postProcessPropertyValues方法 其实就是将字符串转换为需要的对象如把 字符串"2015-12-12"转成date型的对象
      4.3.8 处理 XXAware接口的实现
      4.3.9 处理 postProcessBeforeInitialization
      4.3.10 处理 InitializingBean的afterPropertiesSet
      4.3.11 处理 custom Init方法
      4.3.12 处理 postProcessAfterInitialization

5 存入cache

6 容器关闭时,销毁对象(仅仅适用于Singleton对象)


其中,4.3.4-4.3.7是属性注入
4.3.4-4.3.12 都可作为bean的生命周期考虑

看一个网上流传甚广的bean生命周期图




////////////

以下为2016-04-20增加

其实getBean部分,主要可以分为3个部分

1-InstantiationAwareBeanPostProcessor 的短路与设值

2-XXXAware的处理

3-初始化BeanPostProcessor的Before与after,还有中间的init-method方法

而这三个部分都是BeanPostProcessor

InstantiationAwareBeanPostProcessor 实现了BeanPostProcess

对xxxaware的处理是借用的ApplicationContextAwareProcessor,它也实现了BeanPostProcess

以上为2016-04-20增加

////////////




参考资料
http://997004049-qq-com.iteye.com/blog/1729793
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值