SpringBoot - XXXAware相关的接口使用场景是什么?

写在前面

aware:英 [əˈweə®] 美 [əˈwer] adj.意识到的;知道的;觉察到的。
XXXAware在Spring里表示对XXX感知,当业务中实现XXXAware接口并且实现了对应的setXXX方法以后,就可以使用XXX的特性了。在某些特定的业务中需要获取一些在SpringBoot启动时的信息,也就是说有一些业务场景需要获取某些信息,而这些信息只有在SpringBoot各个生命周期中的各个阶段才能暴露出来,这时实现Aware接口就可以满足业务场景了。
Aware自身是一个空的接口,SpringBoot有很多Aware的实现接口,开发者实现这些已有的接口就能获取特定的信息。SpringBoot 提供了九大感知类接口:ApplicationContextAware、EnvironmentAware、ApplicationEventPublisherAware、BeanNameAware、BeanClassLoaderAware、BeanFactoryAware、EmbeddedValueResolverAware、ResourceLoaderAware、MessageSourceAware

使用场景

使用XXXAware可以让Bean获得Spring容器的服务,从而获取SpringBoot启动时的一些信息。

调用过程

如果某个Bean想要使用当前的 ApplicationContext,那么只需要让该Bean实现ApplicationContextAware接口,然后实现接口中唯一的方法void setApplicationContext(ApplicationContext var1) throws BeansException就可以了,Spring容器会自动调用这个回调方法将ApplicationContext 传给我们就可以了。

内置接口

序号接口说明
1ApplicationContextAware获取当前应用的上下文对象
2EnvironmentAware获取系统变量和环境变量,包括业务配置的以及系统默认的属性信息
3ApplicationEventPublisherAware获取应用事件发布器,可以发布我们监听的事件
4BeanNameAware获取容器中的Bean的名称或者是ID
5BeanClassLoaderAware获取Bean的类加载器
6BeanFactoryAware获取Bean的创建工厂对象,获取到这个工厂对象后可以使用BeanFactory提供大量功能
7EmbeddedValueResolverAware获取Spring容器加载的properties文件属性值
8ResourceLoaderAware获取资源加载器,可以加载特定业务需要的资源
9MessageSourceAware获取文本信息 ,解析消息

代码示例

@Slf4j
public class KieTemplate implements BeanClassLoaderAware {
    ...
    private ClassLoader classLoader;
    // SpringBoot会自动回调这个函数,将ApplicationContext对象传递给业务上下文,获取到这个实例可以做对应的处理
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        this.classLoader = classLoader;
    }
    ...
}

public class MyApplicationContext implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Optional.ofNullable(this.applicationContext).orElse(this.applicationContext = applicationContext);
    }

    public <T> T getBean(String name, Class<T> requiredType) throws BeansException {
        return applicationContext.getBean(name, requiredType);
    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值