自然环境:Spring5.3.3 Java8
新项目中假如一些Bean中必须应用如ApplicationContext,Environment,BeanFactory等目标时大家都是会去完成有关的Aware插口目标,随后就可以立即应用相匹配的目标了,今日大家就来逐渐它的完成基本原理。
应用实例:
- @Component
- public class BeanAware implements ApplicationContextAware {
- private ApplicationContext ctx ;
- @Override
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
- this.ctx = applicationContext ;
- System.out.println(this.ctx) ;
- }
- }
通道涵数:
- public static void main(String[] args) {
- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext("com.pack") ;
- ctx.getBean(BeanAware.class) ;
- ctx.close();
- }
如同上边那样如果你完成相匹配的*Aware插口就可以应用相对应的插口目标了。
先讨论一下Aware插口的等级构造:
然后大家查询
AnnotationConfigApplicationContext的父类AbstractApplicationContext
在父类中,有以下方式:
上边选定的便是解决Aware有关接口类了。查询这类
- class ApplicationContextAwareProcessor implements BeanPostProcessor
此类是个Bean后CPU,在bean创建对象及依赖注入进行后、在一切复位编码(例如环境变量中的init-method)启用以前启用和复位编码启用以后启用
在复位以前方式中先查验Bean是不是回应Aware插口的派生类,要不是立即回到;不然进到invokeAwareInterfaces方式
到这儿你应该知道了Aware的最底层基本原理了吧
结束!!!