关于ApplicationContextAware在项目中的使用
相关背景
最近看到项目中老大用了多次这个类,今天研究一下这个类的使用,在由Spring搭建的Web程序中,Spring管理了所有的bean实例,在程序中如果需要某个bean实例时最基本的操作就是
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
CommonService commonService= (CommonService)applicationContext.getBean("CommonService");
通过上述的方式获取对应的实例bean,但这种方式存在一个问题就是这样做会重新加载applicationContext.xml的文件,将之前web应用启动时的相关bean重新进行初始化,这样有些bean就相当于重新初始化了一遍,相信这不是我们想看到的结果。这时ApplicationContextAware这个接口就发挥出了它的作用,在相关类上实现该接口,并在类中设置私有属性,覆写该接口中的setApplicationContext方法,通过这种方式将Spring应用的applicationContext上下文导入到需要使用的相关类中。类似如下方式:
public class XXXService implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
然后在项目中使用applicationContext.getBean就可以获取到对应想拿到的bean
注意事项:
1.Spring不会平白无故的为某个类执行setApplicationContext的方法,需要我们将该类放入到Spring容器中进行管理,可以通过将该类配置到xml配置文件的方式,或者通过@Component或@Service的类似注解,将该类加入到Spring容器中;