Spring的ApplicationContextAware的使用

Spring的ApplicationContextAware的使用

Spring中ApplicationContextAware主要用来获取Spring上下文已经实例化的Bean对象

1 问题引入

项目使用Spring管理各个实例对象Bean, 如果为了使用已被实例化的Bean对象,如果使用再次加载配置文件的方法,可能会出现一个问题,如一些线程配置任务, 会启动两份,产生了冗余.

ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");  
UserService userService = (UserService)appContext.getBean("userService");  

2 ApplicationContextAware的简介

当一个类实现了ApplicationContextAware接口,这个类就可以方便获取ApplicationContext中的所有bean,即这个类可以获取Spring配置文件中管理的所有Bean对象.

@Component
public class DateUtil implements ApplicationContextAware {
    
    

    private static ApplicationContext applicationContext;

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

    public static Object getObject(String id) {
    
    
        Object object = applicationContext.getBean(id);
        return object;
    }
}

在Spring配置文件中, 将自定义类注册到Spring中,在类中可以灵活的获取ApplicationContext, Spring能自动执行setApplicationContext方法,获得ApplicationContext对象,ApplicationContext对象是由spring注入的,且Spring配置文件中存在该对象.

3 使用场景

ApplicationContextAware获取ApplicationContext上下文的情况,适用于当前运行的代码和已启动的Spring代码处于同一个Spring上下文,否则获取到的ApplicationContext是空的.

常见的使用场景有:

  • 在监听器中, 去监听到事件的发生, 然后从Spring的上下文中获取Bean对象, 去修改保存相关的业务数据.
  • 在某个工具类中, 需要提供处理通用业务数据的方法等

Guess you like

Origin blog.csdn.net/ABestRookie/article/details/120713610