栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 getBean(String name, Class requiredType) throws BeansException {
        return applicationContext.getBean(name, requiredType);
    }

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/686045.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号