查看原文
其他

Spring Aware容器感知技术

2017-09-10 javastack Java技术栈


Spring Aware是什么

Spring提供Aware接口能让Bean感知Spring容器的存在,即让Bean可以使用Spring容器所提供的资源。

Spring Aware的分类

几种常用的Aware接口如下。

Aware接口说明
ApplicationContextAware能获取Application Context调用容器的服务
ApplicationEventPublisherAware应用事件发布器,可以用来发布事件
BeanClassLoaderAware能获取加载当前Bean的类加载器
BeanFactoryAware能获取Bean Factory调用容器的服务
BeanNameAware能获取当前Bean的名称
EnvironmentAware能获取当前容器的环境属性信息
MessageSourceAware能获取国际化文本信息
ResourceLoaderAware获取资源加载器读取资源文件
ServletConfigAware能获取到ServletConfig
ServletContextAware能获取到ServletContext

更多的可以看它的继承图。

Spring Aware的使用

如要获取容器中的某个Bean,可以继承ApplicationContextAware,让这个Bean拥有调用容器服务的能力。

  1. import org.springframework.beans.BeansException;

  2. import org.springframework.context.ApplicationContext;

  3. import org.springframework.context.ApplicationContextAware;

  4. public class SpringAppContext implements ApplicationContextAware {

  5.    private static ApplicationContext applicationContext = null;

  6.    @Override

  7.    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

  8.        if (SpringAppContext.applicationContext == null) {

  9.            SpringAppContext.applicationContext = applicationContext;

  10.        }

  11.    }

  12.    public static ApplicationContext getApplicationContext() {

  13.        return applicationContext;

  14.    }

  15.    public static Object getBean(String name) {

  16.        return getApplicationContext().getBean(name);

  17.    }

  18.    public static <T> T getBean(Class<T> clazz) {

  19.        return getApplicationContext().getBean(clazz);

  20.    }

  21.    public static <T> T getBean(String name, Class<T> clazz) {

  22.        return getApplicationContext().getBean(name, clazz);

  23.    }

  24. }


看完有没有收获?

分享到朋友圈给更多的人吧。






您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存