spring配置文件中import标签的奇怪行为

时间:2013-07-24 07:40:17

标签: spring

我正在研究弹簧 - 3.2.2。我在eclipse中创建了两个java项目。

  1. SpringTest
  2. Testclasspath
  3. SpringTest项目具有以下beans.xml,其中定义了一个bean。

    <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">
    
       <bean id="helloWorld" class="com.spring.HelloWorld" init-method="testUpdate" scope="prototype">
           <property name="message" value="Hello World!"/>
       </bean>
    </beans>
    

    我已经创建了项目SpringTest的jar springtest.jar,它已被添加到项目Testclasspath的类路径中。 Testclasspath项目的Bean配置文件是talentacquisition.xml,它正在导入Springtest项目的beans.xml文件。请在以下内容中找到talentacquisition.xml

    <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">
    
        <import resource="Beans.xml"/>
        <bean id="juggler" class="com.springaction.springidol.Juggler" />
    
     </beans>
    

    我对talentacquisition.xml中import标记的行为感到困惑它如何能够找到类路径中jar(springtest.jar)中存在的Beans.xml并能够加载bean?为什么春天没有给出任何错误?我不必将talentacqusition.xml中的import标签修改为以下

    <import resource="classpath:Beans.xml"/>
    

    如果导入能够找到文件Beans.xml,那么我们何时应该使用 classpath: classpath *:

1 个答案:

答案 0 :(得分:1)

ResourceLoader负责Spring如何加载资源。参考手册

  

提供给ApplicationContext的位置路径   构造函数实际上是资源字符串,并且以简单的形式存在   适当地处理特定的上下文实现。   ClassPathXmlApplicationContext将简单的位置路径视为   classpath位置。您还可以使用位置路径(资源字符串)   带有特殊前缀来强制加载定义   无论实际的上下文类型如何,都可以使用classpath或URL。

您要实例化的ClassPathXmlApplicationContext“将一个简单的位置路径视为类路径位置”,即它将“Beans.xml”视为“classpath:Beans.xml”。同样,FileSystemXmlApplicationContext会将“Beans.xml”视为“file:Beans.xml”。  手册的第6.7节也有更多细节。