Spring ApplicationContextAware 相关源码

Spring初始化入口:

AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)

在方法的最后一个处理:

finishBeanFactoryInitialization(AbstractApplicationContext.java:866)时会实例化bean并且进行初始化,ApplicationContextAware定义的setApplication方法也是在初始化的时候调用。相关代码:

创建bean实例最终会落到如下方法上:

AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)

该方法的:

 

 代码通过反射实例化对象。

然后在:

 

 执行初始化,初始化具体逻辑,在初始化时会调用 applyBeanPostProcessorsAfterInitialization 方法,该方法会遍历注册的所有BeanPostProcessor,并把当前bean传进去做属性注入相关动作:

 

 其中第一个就是ApplicationContextAware的实现类。在该类中会判断当前bean是否是这种类型,如果是则把当前spring上下文通过反射ApplicationContextAware的set方法设置进去:

 

 

posted @ 2021-07-02 16:35  Birding  阅读(47)  评论(0编辑  收藏  举报