spring aware 接口源码浅析

本文深入探讨Spring框架中的Aware接口,重点分析ApplicationContextAware和BeanNameAware的作用与区别。通过实例代码展示了如何在bean初始化阶段利用这些接口进行特定操作。

先来看下aware的官方注释

Marker superinterface indicating that a bean is eligible to be
notified by the Spring container of a particular framework object
through a callback-style method. Actual method signature is
determined by individual subinterfaces, but should typically
consist of just one void-returning method that accepts a single
argument.

简单概括下意思是,标记这个接口的实现类能被spring容器框架的类通过回调方法“提醒”,具体的方法每个单独的子接口都不同,但是典型的组成是由一个无返回值且只接受一个参数的方法组成。

这边主要说明两类常见的aware子类,ApplicationContextAware和BeanNameAware

ApplicationContextAware接口

这个在前期说明spring 的后置处理器时已经说明过,在bean的初始化阶段做的处理,如果不熟悉,可以先看这篇文章:spring生命周期-BeanPostProcessor在spring中应用
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

这里将容器的对象放进初始化的bean中

在这里插入图片描述

BeanNameAware接口

这个也是在bean初始化方法里面做的处理,在前置处理器处理之前
在这里插入图片描述
将spring相关容器设置进bean
在这里插入图片描述
从这里可以看出,这个BeanNameAware 和ApplicationContextAware 接口初始化的方式和时间不是一样的。

实例很简单

@Component
public class Red implements ApplicationContextAware,BeanNameAware,EmbeddedValueResolverAware {
	
	private ApplicationContext applicationContext;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		// TODO Auto-generated method stub
		System.out.println("传入的ioc:"+applicationContext);
		this.applicationContext = applicationContext;
	}

	@Override
	public void setBeanName(String name) {
		// TODO Auto-generated method stub
		System.out.println("当前bean的名字:"+name);
	}

	@Override
	public void setEmbeddedValueResolver(StringValueResolver resolver) {
		// TODO Auto-generated method stub
		String resolveStringValue = resolver.resolveStringValue("你好 ${os.name} 我是 #{20*18}");
		System.out.println("解析的字符串:"+resolveStringValue);
	}
}

 @Test
    public void test1(){

        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);

        System.out.println("容器创建完成");

        //applicationContext.getBean("car");

        applicationContext.close();
    }

结果为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值