关于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容器中;

 

posted @ 2020-07-30 11:19  云翊宸  阅读(263)  评论(0编辑  收藏  举报