我不久前做过这个。
Spring 的文档建议您使用 aContextLoaderListener
来加载 servlet 的应用程序上下文。而不是这个 Spring 类,使用您自己的侦听器。这里的关键是您的自定义侦听器可以在 Spring 配置中定义,并且可以知道它定义的应用程序上下文;因此,它不会加载新的应用程序上下文,而是返回该上下文。
侦听器看起来像这样:
public class CustomContextLoaderListener extends ContextLoaderListener implements BeanFactoryAware {
@Override
protected ContextLoader createContextLoader() {
return new DelegatingContextLoader(beanFactory);
}
protected BeanFactory beanFactory;
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
}
并且这样DelegatingContextLoader
做:
public class DelegatingContextLoader extends ContextLoader {
protected BeanFactory beanFactory;
public DelegatingContextLoader(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
@Override
protected WebApplicationContext createWebApplicationContext(ServletContext servletContext, ApplicationContext parent) throws BeansException {
return new GenericWebApplicationContext((DefaultListableBeanFactory) beanFactory);
}
}
它有点乱,可能可以改进,但这对我有用。