Hice esto hace un tiempo.
Spring documentation sugiere que utilice un ContextLoaderListener
para cargar el contexto de la aplicación para los servlets. En lugar de esta clase de primavera, usa tu propio oyente. La clave aquí es que su oyente personalizado se puede definir en la configuración de Spring y puede conocer el contexto de la aplicación en el que está definido; entonces, en lugar de cargar un nuevo contexto de aplicación, simplemente devuelve ese contexto.
El oyente sería algo como esto:
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;
}
}
y la DelegatingContextLoader
hace esto:
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);
}
}
Es un poco complicado, y probablemente se puede mejorar, pero esto ha funcionado para mí.
Gracias! Después de algunas modificaciones, resolví mi problema. Con esta solución obtuve la excepción 'ApplicationEventMulticaster not initialized', porque' GWAC' no se reescribió, pero cuando llamé a 'refresh()', obtuve una excepción sobre la segunda llamada de los postprocesadores. Así que, en lugar de usar 'GWAC', creé una clase' WrapperWebApplicationContext' que delegaba todas las llamadas a 'ApplicationContext' pasadas en el constructor. Ahora funciona perfectamente. Además, anulé 'createWebApplicationContext' of' ContextLoaderListener' - de esta manera no hay necesidad de usar la clase 'ContextLoader'. – Fixpoint
Ok. Estoy perplejo. ¿Cómo se obtiene el contenedor de servlets para usar el bean Listener que se ha definido en su configuración de Spring en lugar de crear una nueva instancia que no sabe nada acerca de applicationContext/beanFactory? – CupawnTae