Java Spring使用bean声明自动查找和解析xml文件

时间:2014-04-05 03:13:28

标签: java spring spring-mvc

我最近在使用一个复杂的Spring MVC应用程序。我将我的servlet调度程序设置为自动查找Controller类。

<!-- Scans for application @Components to deploy -->
<context:component-scan base-package="com.example."/>
<context:annotation-config/>
<context:spring-configured />
<tx:annotation-driven transaction-manager="transactionManager"/>

据我了解,它贯穿所有罐子并试图找到所有控制器。

有趣的是,在类路径的其中一个jar中,我有以下文件myFile.xml,其中包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<!-- This bean is the parent ApplicationContext for the WebApplicationContexts defined in the WARs. 
     The context files listed here should contain beans that are used by all WARs, for example Services and DAOs. -->
<bean id="grants-app.context" class="org.springframework.context.support.ClassPathXmlApplicationContext">
    <constructor-arg>
        <list>
            <value>/example/config.xml</value>
            <value>/example/app-config.xml</value>
        </list>
    </constructor-arg>
</bean>
</beans> 

Spring以某种方式获取此文件并尝试在此文件中定义bean。我不明白这种行为 - 我只告​​诉Spring寻找Controller类。可以请有人解释我这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

您需要查看您的web.xml。 当您的每个Web应用程序都想要访问常见的源代码(如服务和daos(可能在您的情况下可能在EAR中的jar中)时,您可以在上下文参数中指定它,如下面的示例:

    <!--  root application context -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:rootContextBeans.xml</param-value>
    </context-param>
    <!--  shared service layer - parent application context -->
    <context-param>
        <param-name>locatorFactorySelector</param-name>
        <param-value>classpath:myFile.xml</param-value>
    </context-param>
    <context-param>
        <param-name>parentContextKey</param-name>
        <param-value>servicelayer-context</param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

和myFile.xml就像

    <beans>
      <bean id="servicelayer-context" class="org.springframework.context.support.ClassPathXmlApplicationContext">
        <constructor-arg>
          <list>
                <value>/example/config.xml</value>
                <value>/example/app-config.xml</value>
            </list>
        </constructor-arg>
      </bean>
    </beans>

web.xml中的ContextLoaderListener / contextLoader(较旧的spring版本)从myFile.xml加载这些文件