springboot aware是如何被调用的

springboot aware是什么?

aware其实并非是springboot添加的功能,而是spring框架的重要部分;

Aware本身是一个接口,如图:

 他的实现类有很多,比如我们最常见的:ApplicationContextAware

springboot/spring的 aware是如何被调用的?

一句话表述,是在 BeanPostProcessor 的 postProcessBeforeInitialization 方法种调用的,换句话来描述,每个Aware都依赖着BeanPostProcessor来调用它;

详细点讨论的话,叫要回到我们所熟知的,十分出名的 refresh 方法了。

  1. refresh 方法会调用方法 finishBeanFactoryInitialization(beanFactory) 来实例化所有的非懒加载的单例bean;
  2. 调用 DefaultListableBeanFactory 的 preInstantiateSingletons 方法;
  3. DefaultListableBeanFactory中会调用同类中的getBean方法,之后会调用到 AbstractBeanFactory的 doGetBean方法(很长的一个方法,真正做事情的);
  4. 调用 DefaultListableBeanFactory 的 getSingleton方法
  5. 调用AbstractAutowireCapableBeanFactory的 doCreateBean -> initializeBean方法
  6. initializeBean方法有一个关键的步骤:applyBeanPostProcessorsBeforeInitialization。这个方法会遍历容器中的BeanPostProcessor,并执行processor.postProcessBeforeInitialization。例如ApplicationContextAware就依赖着 ApplicationContextAwareProcessor,其postProcessBeforeInitialization方法会判断bean的类型,如果满足特定类型(其实不仅仅包括ApplicationContextAware),会执行容器上下文的设置;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值