Spring Aware接口

容器管理的 Bean 一般不需要了解容器的状态和直接使用容器, 但是在某些情况下, 是需要在 Bean 中直接对IOC容器进行操作的, 可以通过特定的 Aware 接口来完成. aware 接口有以下这些:

接口名描述
ApplicationContextAware实现了这个接口的类都可以获取到一个 ApplicationContext 对象. 可以获取容器中的所有 Bean
ApplicationEventPublisherAware在 bean 中可以得到应用上下文的事件发布器, 从而可以在Bean中发布应用上下文的事件.
BeanClassLoaderAware获取 bean 的类加载器
BeanFactoryAware获取 bean 的工厂
BeanNameAware获取 bean 在容器中的名字
BootstrapContextAware获取 BootstrapContext
LoadTimeWeaverAware加载Spring Bean时织入第三方模块, 如AspectJ
MessageSourceAware主要用于获取国际化相关接口
NotificationPublisherAware用于获取通知发布者
ResourceLoaderAware初始化时注入ResourceLoader
ServletConfigAwareweb开发过程中获取ServletConfig
ServletContextAwareweb开发过程中获取ServletContext信息

ApplicationContextAware 接口

这个接口比较常用, ApplicationContextAware 接口中只有一个方法, 用来获取容器中的所有 Bean.

void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
@Component
public class Test implements ApplicationContextAware {

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        
    }
}

这里提供一个常用的工具类

@Component
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(
        ApplicationContext applicationContext) throws BeansException {
        SpringUtil.applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 根据Bean名称获取实例
     * 
     * @param name
     * 
     *            Bean注册名称
     * @return bean实例
     */
    @SuppressWarnings("unchecked")
    public static <T> T getBean(
        String name) throws BeansException {
        return (T) applicationContext.getBean(name);
    }

}
    原文作者:sc_ik
    原文地址: https://segmentfault.com/a/1190000017182561
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞