Aware
Aware 是 Spring 中的一個根接口,繼承該接口的子接口有很多,但是該接口沒有任何方法,所以大家可以把它理解成一個標記接口:
Spring框架中提供了許多實現(xiàn)了Aware接口的類,這些類主要是為了輔助Spring訪問容器中的數(shù)據(jù),比如BeanNameAware,這個類能夠在Spring容器加載的過程中將Bean的名字(id)賦值給變量。
Spring Aware實現(xiàn)關(guān)系:

Spring Aware 以下是幾個常用的接口:
- 1、ApplicationContextAware:能獲取Application Context調(diào)用容器的服務
- 2、BeanNameAware:提供對BeanName進行操作
- 3、ApplicationEventPublisherAware:主要用于事件的發(fā)布
- 4、BeanClassLoadAware:相關(guān)的類加載器
- 5、BeanFactoryAware:聲明BeanFactory的
- 6、MessageSourceAware:獲取MessageSource
- 7、ResourceLoaderAware:獲取資源加載器,可以獲得外部資源文件
ApplicationContextAware
ApplicationContext可以獲取容器中的bean,但是必須注入才能使用,當一些類不能注入的時候怎么才能獲得bean呢?比如Utils中的類,通常不能直接通過注入直接使用ApplicationContext,此時就需要借助ApplicationContextAware這個接口了。
ApplicationContextAware的實現(xiàn)類如下
/**
* @author: huangyibo
* @Date: 2019/10/25 23:48
* @Description: 提供手動獲取被spring管理的bean對象
*/
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (SpringUtil.applicationContext == null) {
SpringUtil.applicationContext = applicationContext;
}
}
// 獲取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
// 通過name獲取 Bean.
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
// 通過class獲取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
// 通過name,以及Clazz返回指定的Bean
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
配置了如上的工具類,那么就可以直接使用SpringUtil獲取ApplicationContext對象了,而不需要注入了,如下:
StringRedisTemplate redisTemplate=SpringUtil.getBean("stringRedisTemplate",StringRedisTemplate.class);
SpringBoot整合Netty框架的時候,如果在Netty中的自定義Handler中要使用到Spring中的Bean的時候,因為無法直接將Bean注入到Netty中,所以就可以使用ApplicationContextAware接口了。
其他Spring Aware 接口的使用方法以此類推。