двойная инициализация фасоли в моле 7.1.4 - PullRequest
0 голосов
/ 12 июля 2010

Когда я запускаю веб-приложение, имеющее конфигурацию Spring в Jetty, я вижу два вызова инициализации (методы @PostConstruct).web.xml объявляет ContextLoaderListener и предоставляет contextConfigLocation.

Это кажется неправильным.(весна 3.0.3).Я что-то сделал?

РЕДАКТИРОВАТЬ

Мой web.xml вызывает и DispatcherServlet, и org.springframework.web.context.ContextLoaderListener.Если я удаляю более позднюю версию, я перестаю видеть две инициализации - но мое приложение перестает работать в плагине jetty-maven с

No WebApplicationContext found: no ContextLoaderListener registered?

EDIT 2 :

Понял.Сервлет диспетчеризации найдет некоторые файлы контекста с условным именем (* -servlet.xml), поэтому повторный вызов этого файла в contextConfigLocation привел к его двойной загрузке.

Трассировка стека 1:

Segmenter.initialize() line: 63 
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]  
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39  
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
Method.invoke(Object, Object...) line: 597  
InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(Object) line: 340    
InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(Object, String) line: 293    
CommonAnnotationBeanPostProcessor(InitDestroyAnnotationBeanPostProcessor).postProcessBeforeInitialization(Object, String) line: 130 
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).applyBeanPostProcessorsBeforeInitialization(Object, String) line: 394    
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).initializeBean(String, Object, RootBeanDefinition) line: 1405    
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String, RootBeanDefinition, Object[]) line: 519 
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String, RootBeanDefinition, Object[]) line: 456   
AbstractBeanFactory$1.getObject() line: 291 
DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String, ObjectFactory) line: 222  
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String, Class<T>, Object[], boolean) line: 288    
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line: 190   
DefaultListableBeanFactory.preInstantiateSingletons() line: 574 
XmlWebApplicationContext(AbstractApplicationContext).finishBeanFactoryInitialization(ConfigurableListableBeanFactory) line: 895 
XmlWebApplicationContext(AbstractApplicationContext).refresh() line: 425    
ContextLoaderListener(ContextLoader).createWebApplicationContext(ServletContext, ApplicationContext) line: 276  
ContextLoaderListener(ContextLoader).initWebApplicationContext(ServletContext) line: 197    
ContextLoaderListener.contextInitialized(ServletContextEvent) line: 47  
JettyWebAppContext(ContextHandler).startContext() line: 645 
JettyWebAppContext(ServletContextHandler).startContext() line: 200  
JettyWebAppContext(WebAppContext).startContext() line: 995  
JettyWebAppContext(ContextHandler).doStart() line: 588  
JettyWebAppContext(WebAppContext).doStart() line: 381   
JettyWebAppContext.doStart() line: 114  
JettyWebAppContext(AbstractLifeCycle).start() line: 55  
ContextHandlerCollection(HandlerCollection).doStart() line: 165 
ContextHandlerCollection.doStart() line: 162    
ContextHandlerCollection(AbstractLifeCycle).start() line: 55    
HandlerCollection.doStart() line: 165   
HandlerCollection(AbstractLifeCycle).start() line: 55   
JettyServer(HandlerWrapper).doStart() line: 92  
JettyServer(Server).doStart() line: 228 
JettyServer.doStart() line: 67

Трассировка стека 2:

Segmenter.initialize() line: 63 
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]  
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39  
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
Method.invoke(Object, Object...) line: 597  
InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(Object) line: 340    
InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(Object, String) line: 293    
CommonAnnotationBeanPostProcessor(InitDestroyAnnotationBeanPostProcessor).postProcessBeforeInitialization(Object, String) line: 130 
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).applyBeanPostProcessorsBeforeInitialization(Object, String) line: 394    
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).initializeBean(String, Object, RootBeanDefinition) line: 1405    
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String, RootBeanDefinition, Object[]) line: 519 
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String, RootBeanDefinition, Object[]) line: 456   
AbstractBeanFactory$1.getObject() line: 291 
DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String, ObjectFactory) line: 222  
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String, Class<T>, Object[], boolean) line: 288    
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line: 190   
DefaultListableBeanFactory.preInstantiateSingletons() line: 574 
XmlWebApplicationContext(AbstractApplicationContext).finishBeanFactoryInitialization(ConfigurableListableBeanFactory) line: 895 
XmlWebApplicationContext(AbstractApplicationContext).refresh() line: 425    
DispatcherServlet(FrameworkServlet).createWebApplicationContext(ApplicationContext) line: 442   
DispatcherServlet(FrameworkServlet).createWebApplicationContext(WebApplicationContext) line: 458    
DispatcherServlet(FrameworkServlet).initWebApplicationContext() line: 339   
DispatcherServlet(FrameworkServlet).initServletBean() line: 306 
DispatcherServlet(HttpServletBean).init() line: 127 
DispatcherServlet(GenericServlet).init(ServletConfig) line: 241 
ServletHolder.initServlet() line: 421   
ServletHolder.doStart() line: 245   
ServletHolder(AbstractLifeCycle).start() line: 55   
ServletHandler(ServletHandler).initialize() line: 691   
JettyWebAppContext(ServletContextHandler).startContext() line: 204  
JettyWebAppContext(WebAppContext).startContext() line: 995  
JettyWebAppContext(ContextHandler).doStart() line: 588  
JettyWebAppContext(WebAppContext).doStart() line: 381   
JettyWebAppContext.doStart() line: 114  
JettyWebAppContext(AbstractLifeCycle).start() line: 55  
ContextHandlerCollection(HandlerCollection).doStart() line: 165 
ContextHandlerCollection.doStart() line: 162    
ContextHandlerCollection(AbstractLifeCycle).start() line: 55    
HandlerCollection.doStart() line: 165   
HandlerCollection(AbstractLifeCycle).start() line: 55   
JettyServer(HandlerWrapper).doStart() line: 92  
JettyServer(Server).doStart() line: 228 
JettyServer.doStart() line: 67

1 Ответ

2 голосов
/ 12 июля 2010

На самом деле у вас есть два контекста приложения Spring:

  • Контекст, загружаемый ContextLoaderListener из файлов XML, заданных context-param с именем contextConfigLocation (или applicationContext.xml по умолчанию).
  • Контекст, загружаемый DispatcherServlet из файлов XML, указанных init-param сервлета диспетчера с именем contextConfigLocation (или <servletname>-servlet.xml по умолчанию).

Первый является родительскимконтекст последнего.

Итак, вы как-то получили определения одного и того же компонента в обоих контекстах (возможно, оба contextConfigLocation указывают на одни и те же XML-файлы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...