ApplicationContextAware、EnvironmentAware、ApplicationEventPublisherAware、BeanNameAware、BeanClassLoaderAware、BeanFactoryAware、EmbeddedValueResolverAware、ResourceLoaderAware、MessageSourceAware。
首先来介绍一下Aware:
指示bean有资格被特定框架对象的Spring容器,通过回调样式的方法。
实际的方法签名由各个子接口确定,但应该通常只包含一个接受单个参数的void返回方法。
上面这个是把该类上面的注释,复制到百度翻译的。
大白话:spring容器在启动过程中,他本身拥有一些资源(比如:我们的配置他封装成了对象,资源加载器),然后通过提供接口,用户去进行实现,springboot通过回调的方式,将其资源传递给用户。在实现Aware接口的时候,应该只包含一个方法,并且方法参数只有一个,没有返回值。
比如这个提供上下文的:
public interface ApplicationContextAware extends Aware {
void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
}
那么我们就以提供上下文对象这个例子为例:ApplicationContextAware
1、编写一个类,实现ApplicationContextAware接口,并且覆盖其方法
2、定义一个内部成员,将其保存,后面需要用的时候直接获取
package com.osy.aware;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
public class MyApplicationContextAware implements ApplicationContextAware {
private ApplicationContext applicationContext;
/**
* springboot会回调这个函数,
* 他回调的时候,会将ApplicationContext对象传递给我们,那么我们就获取获取到他,并且做一些事情。
* @param applicationContext
* @throws BeansException
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
Optional.ofNullable(this.applicationContext).orElse(this.applicationContext = applicationContext);
}
/**
* 随便举个例子,使用ApplicationContext上下文的网上例子有很多,
* 他的原理就是这样的
*/
public <T> T getBean(String name, Class<T> requiredType) throws BeansException {
return applicationContext.getBean(name, requiredType);
}
}
文章开头例举的几个常用的Aware,这里就不一一举例了,将其作用以如下表格进行展示,需要时再来进行查看即可。
接口 | 作用 |
---|---|
ApplicationContextAware | 获取当前应用的上下文对象 |
EnvironmentAware | 获取环境变量,包括我们配置的以及系统的 |
ApplicationEventPublisherAware | 获取应用事件发布器,可以发布我们监听的事件 |
BeanNameAware | 获取容器中的bean的名称 |
BeanClassLoaderAware | 获取bean的类加载器 |
BeanFactoryAware | 获取bean的创建工厂对象,如果我们要创建,可以试试通过他来创建 |
EmbeddedValueResolverAware | 获取spring容器加载的properties文件属性值。 |
ResourceLoaderAware | 获取资源加载器,我们要加载自己的资源,可以使用他。 |
MessageSourceAware | 获取文本信息 ,解析消息。 |