spring拓展点之- Aware 接口

spring拓展点之- Aware 接口

一:Aware接口的作用

​ aware接口是spring提供的一个拓展的感知接口,具体做啥用,怎么用?

我们可以看看源码!

我们找到spring源码中的Aware接口,看看注释

 * A 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.
 * The actual method signature is determined by individual subinterfaces but should
 * typically consist of just one void-returning method that accepts a single argument.
 *
 * <p>Note that merely implementing {@link Aware} provides no default functionality.
 * Rather, processing must be done explicitly, for example in a
 * {@link org.springframework.beans.factory.config.BeanPostProcessor}.
 * Refer to {@link org.springframework.context.support.ApplicationContextAwareProcessor}
 * for an example of processing specific {@code *Aware} interface callbacks.

大概意思就是:这是个父接口,spring特定对象通过回调方法,通知通知。然后具体的通知方法通过子接口实现

还说明了,单独实现Aware接口不实现功能,需要定义一个BeanPostProcessor接口的实现类,比如:ApplicationContextAwareProcessor。

二:通过ApplicationContextAwareProcessor了解Aware接口

​ 我们可以看到ApplicationContextAwareProcessor 实现了BeanPostProcessor接口,再bean初始化前,执行一些aware接口的实现类。

通过invokeAwareInterfaces方法执行一些aware接口的实现方法。

通过再这些子感知接口初始化的时候通知实现类,从而获取一些ioc对象,去对容器做自己的拓展。

比如:PropertySourcesPlaceholderConfigurer这个类

public class PropertySourcesPlaceholderConfigurer extends PlaceholderConfigurerSupport implements EnvironmentAware

实现了EnvironmentAware,就看可以通过setEnvironment方法拿到beanFactory中的environment对象,代码如下图。

@Override
	public void setEnvironment(Environment environment) {
		this.environment = environment;
	}


拿到环境变量后,可以替换代码中${...}属性值。

​ 总的来说就是实现一些拓展的时候,需要spring容器获取bean的一些资源,可以通过实现对应的感知接口获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值