Spring中Aware接口实现原理解析

环境: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();
	}

Spring中Aware接口实现原理解析

 

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

先来看看Aware接口的层级结构:

Spring中Aware接口实现原理解析

 

接着我们查看AnnotationConfigApplicationContext的父类AbstractApplicationContext

在父类中,有如下方法:

Spring中Aware接口实现原理解析

 

上面选中的就是处理Aware相关接口类了。查看这类

class ApplicationContextAwareProcessor implements BeanPostProcessor

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

Spring中Aware接口实现原理解析

 

在初始化之前方法中先检查Bean是否是响应Aware接口的子类,如果不是直接返回;否则进入invokeAwareInterfaces方法

Spring中Aware接口实现原理解析

 

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

完毕!!!

给个关注+转发呗谢谢

Spring中Aware接口实现原理解析

 

Spring中Aware接口实现原理解析

 

Spring中Aware接口实现原理解析

 

Spring中Aware接口实现原理解析

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值