Spring中Aware接口实现原理解析

项目中如果某些Bean中需要使用如ApplicationContext,Environment,BeanFactory等对象时我们都会去实现相关

Spring中Aware接口实现原理解析

环境:Spring5.3.3 + Java8

项目中如果某些Bean中需要使用如ApplicationContext,Environment,Bean$ t DFactory等对象时我们都会去实现相关的Awaq , L j l Cre接口/ v / S Y F + ! n对象,然后\ @ s | | *就可以直接使用对应c k o的对象了,今天我们就来开始它的实现原理。

使用示例:

  1. @Component
  2. publicclassBeanAI / : C = V P S .wareimplementsApplicationContextAware{
  3. privateApQ t \ & p G Y rplicatn 9 \ Z 3 6 _ k KionContextctx;
  4. @Override
  5. publicvoidsetApplicationContext(ApplicationContF q I d lextappl! Q H = c X H a GicationContext)throwsBeansException{
  6. this.ctx=applicationContext;
  7. Sys3 O N i h Otem.outF L + c j I p /.println(this.ctx2 { | S);
  8. }
  9. }

入口函数:

  1. publicstaticvoidN & Tmain(String[]args){
  2. AnnotationConfigApplicationContextctx=newAnnotationConfigApplicationContext("com.pack");
  3. ctx.getBean(BeanAware.class);
  4. ctx.close();
  5. }

Spring中Aware接口实现原理解析

正如上面这样只要你实现对应的*Aware接口就可以使用相应的接口对象了。

先来看看Aware接口的层级结j 6 5 + o构:

Spring中Aware接口实现原理解析

j s J @ m着我们查看

AnnotationCoA x Q ) D WnfigApplicationContext的0 Q \ = v U 9 l 6父类AbstractApplicationContext

在父类中,有] Q A R如下方法:

Spring中Aware接口实现原理解析

上面选中的就是处理AK { T : Bware相关接口类了。查看这类

  1. classApplicationContextAwarePr. ( , FoceG O M w EssorimplementsBeanPostProcessor

该类是个Bean后处理器,在bean实例化及依赖注入完成% ` G L p [后、在任何初始化代码(比如配置文件中的init-method)调用之前调用和初始化代码调用之后调用

Spring中Aware接口实现原理解析

在初始化之前2 b v B & j w 6方法中先检查Bean是否是响应Aware接口) 5 C B | K \ F的子类,如果不是直接返回;否则进入invokeAwareInterfn s uaces方法

Spring中Aware接口实现原理解析

到这里你应该知道了Aware的底层原理了吧

完毕!!!

上一篇 2021年5月15日 下午10:51
下一篇 2021年5月15日 下午10:52