环境: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后处理器,香港云服务器在bean实例化及依赖注入完成后、接口解析在任何初始化代码(比如配置文件中的实现init-method)调用之前调用和初始化代码调用之后调用
在初始化之前方法中先检查Bean是否是响应Aware接口的子类,如果不是原理直接返回;否则进入invokeAwareInterfaces方法
到这里你应该知道了Aware的底层原理了吧
完毕!!!
源码库