Spring3MVC调度程序xml和applicationContext xml
我第一次创建了一个SpringMVC应用程序 当我启动服务器时,applicationContext.xml似乎是在我运行任何mvc控制器之前第一次加载的;这就是我想要的 但一旦我运行了一个在dispatcher.xml中加载了context:component scan的控制器……似乎applicationContext.xml又被加载了。。。 为什么会发生这种情况,如何禁用?我只希望applicationContext.xml运行一次 在我运行控制器之后,我看到下面的日志Spring3MVC调度程序xml和applicationContext xml,spring,spring-mvc,Spring,Spring Mvc,我第一次创建了一个SpringMVC应用程序 当我启动服务器时,applicationContext.xml似乎是在我运行任何mvc控制器之前第一次加载的;这就是我想要的 但一旦我运行了一个在dispatcher.xml中加载了context:component scan的控制器……似乎applicationContext.xml又被加载了。。。 为什么会发生这种情况,如何禁用?我只希望applicationContext.xml运行一次 在我运行控制器之后,我看到下面的日志 ClassPath
ClassPathXmlA I org.springframework.context.support.AbstractApplicationContext prepareRefresh Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@65cb65cb: startup date [Tue Feb 15 16:29:21 EST 2011]; root of context hierarchy
XmlBeanDefini I org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions Loading XML bean definitions from class path resource [WEB-INF/applicationContext.xml]
我想这也会导致我的jms DefaultMessageListenerContainer被创建两次
谢谢
xxxdispatcher-servlet.xml
<context:component-scan base-package="com.something.web" />
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
<mvc:interceptors>
<bean class="com.something.SomeInterceptor" />
</mvc:interceptors>
<mvc:resources mapping="/js/**" location="/js/" />
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">common/error</prop>
</props>
</property>
<property name="warnLogCategory" value="abcdefg"/>
</bean>
请从Web.xml中删除ContextLoaderListener。我相信这就是为什么要创建两次上下文的原因。如果不查看您的配置,我们无法回答此问题。当我在没有ContextLoaderListener的情况下启动服务器时,会出现一系列“无法自动连接字段”错误。我认为它不再加载applicationContext.xml了=(我注意到了这种行为,因为我的jms侦听器会在服务器启动时启动。但是,一旦我运行只返回视图的控制器,spring将尝试创建/连接另一个侦听器…仍然停留在这一个上,还有其他想法吗?不管怎样,我明白了,我将jms部分拆分为另一个xml,因此调度程序不会知道它=)
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="/WEB-INF/application.properties" />
</bean>
<!-- Local Data Holder -->
<bean id="propertyHolder" class="com.common.PropertyHolder">
<property name="baseURL" value="${url.base}" />
</bean>
<bean id="messageListener" class="com.something.SomeListener" />
<bean id="xxxDAO"
class="com.XXXDAOImpl"
scope="prototype">
<property name="dataSource" ref="dataSourceQA" />
</bean>
<bean id="xxxServiceTarget" class="com.XXXServiceImpl">
<property name="xxxDAO" ref="xxxDAO"/>
</bean>
<bean id="xxxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="txManager"/>
<property name="target" ref="xxxServiceTarget"/>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- and this is the message listener container -->
<bean id="jmsContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="xxxCF" />
<property name="destination" ref="xxxInboundQueue" />
<property name="messageListener" ref="messageListener" />
</bean>
<servlet>
<servlet-name>xxxdispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>xxxdispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
@Controller
public class XXXController {
@Autowired
private IXXXService xxxService;
@RequestMapping("/xxx")
public String xxxHandler() throws Exception {
return "xxxView";
}