问题:自定义组件想要使用Spring容器底层的组件(ApplicationContext, BeanFactory)等

自定义组件实现xxxAware, 在创建对象的时候, 会调用接口规定的方法注入到相关组件:Aware

先来看一段代码:

Spring源码分析(十一) - Aware注入spring底层组件原理_spring

CTRL+SHIFT+T  找到Aware

Spring源码分析(十一) - Aware注入spring底层组件原理_创建对象_02

 

使用ApplicationContextAware接口为例, 实现接口

1, 新建Light.java类, 实现ApplicaitonContextAware接口

Spring源码分析(十一) - Aware注入spring底层组件原理_创建对象_03

 2,实现BeanNameAware接口

Spring源码分析(十一) - Aware注入spring底层组件原理_spring_04

3,实现EmbeddedValueResolverAware接口

Spring源码分析(十一) - Aware注入spring底层组件原理_创建对象_05

总结:

把Spring底层的组件可以注入到自定义的bean中,ApplicationContextAware是利用ApplicationContextAwareProcessor来处理的, 其它XXXAware也类似, 都有相关的Processor来处理, 其实就是后置处理器来处理;

XXXAware---->功能使用了XXXProcessor来处理的, 这就是后置处理器的作用;

ApplicaitonContextAware--->ApplicationContextProcessor后置处理器来处理的(前面分析过源码