写在前面
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 传给我们就可以了。
内置接口
| 序号 | 接口 | 说明 |
|---|---|---|
| 1 | ApplicationContextAware | 获取当前应用的上下文对象 |
| 2 | EnvironmentAware | 获取系统变量和环境变量,包括业务配置的以及系统默认的属性信息 |
| 3 | ApplicationEventPublisherAware | 获取应用事件发布器,可以发布我们监听的事件 |
| 4 | BeanNameAware | 获取容器中的Bean的名称或者是ID |
| 5 | BeanClassLoaderAware | 获取Bean的类加载器 |
| 6 | BeanFactoryAware | 获取Bean的创建工厂对象,获取到这个工厂对象后可以使用BeanFactory提供大量功能 |
| 7 | EmbeddedValueResolverAware | 获取Spring容器加载的properties文件属性值 |
| 8 | ResourceLoaderAware | 获取资源加载器,可以加载特定业务需要的资源 |
| 9 | MessageSourceAware | 获取文本信息 ,解析消息 |
代码示例
@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);
}
}
本文详细介绍了Spring Boot中的九大Aware接口,如ApplicationContextAware用于获取ApplicationContext,EnvironmentAware用于处理环境变量。通过实现这些接口,Bean能够获取启动时信息并进行定制。实例代码演示了如何在KieTemplate和MyApplicationContext中利用这些接口获取BeanClassLoader等服务。
537

被折叠的 条评论
为什么被折叠?



