环境: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的底层原理了吧
完毕!!!
给个关注+转发呗谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/80041.html