Spring 3 MVC调度程序xml和applicationContext xml

joh*_*ohn 6 spring spring-mvc

我是第一次创建Spring MVC应用程序.

看起来当我启动服务器时,applicationContext.xml甚至在我运行任何mvc控制器之前第一次加载; 这就是我要的.

但是,一旦我运行了一个加载了上下文的控制器:dispatcher.xml中的组件扫描.... IT SEEMS再次加载applicationContext.xml ...为什么会发生这种情况,如何禁用它?我只希望我的applicationContext.xml运行一次.

我运行控制器后,我看到下面的日志......

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]
Run Code Online (Sandbox Code Playgroud)

我认为这也导致我的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>
Run Code Online (Sandbox Code Playgroud)

applicationContext.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>
Run Code Online (Sandbox Code Playgroud)

web.xml中

<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>
Run Code Online (Sandbox Code Playgroud)

调节器

  @Controller
    public class XXXController {

        @Autowired
        private IXXXService xxxService;

        @RequestMapping("/xxx")
        public String xxxHandler() throws Exception {

            return "xxxView";
        }
Run Code Online (Sandbox Code Playgroud)

dan*_*nik 10

请从Web.xml中删除ContextLoaderListener我相信这就是为什么要创建两次上下文的原因.

  • 当我在没有ContextLoaderListener的情况下启动服务器时,我收到了一堆"无法自动装配字段"错误.我认为它根本不再加载applicationContext.xml ... =( (2认同)