在spring-config.xml中配置了构造器注入,构造器中如果需要用到ApplicationContext初始化实例
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] {"config/spring-config.xml"});
ApplicationContext中需要ApplicationContext ,怎么办呢
下面简单聊下接口工具类 ApplicationContextAware.class的作用,在某些特殊的情况下,Bean需要实现某个功能,该功能也依赖于Spring容器才能实现。为了让Bean获取Spring容器,Bean实现ApplicationContextAware接口。
public class SpringContainer implements ApplicationContextAware{
private static ApplicationContext applicationContext;
public static Object getBean(Class<?> clazz) {
return applicationContext.getBean(clazz);
}
public ApplicationContext getApplicationContext() {
return applicationContext;
}
@SuppressWarnings("static-access")
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext=applicationContext;
}
}
spring-config.xml中,bean需要加上depends-on="springContainer"
SpringContainer实现了ApplicationContextAware接口,spring在创建该bean后自动调用setApplicationContext方法,后续可以是使用ApplicationContext 访问