我正在研究弹簧 - 3.2.2。我在eclipse中创建了两个java项目。
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 *:?
答案 0 :(得分:1)
ResourceLoader
负责Spring如何加载资源。参考手册
提供给ApplicationContext的位置路径 构造函数实际上是资源字符串,并且以简单的形式存在 适当地处理特定的上下文实现。 ClassPathXmlApplicationContext将简单的位置路径视为 classpath位置。您还可以使用位置路径(资源字符串) 带有特殊前缀来强制加载定义 无论实际的上下文类型如何,都可以使用classpath或URL。
您要实例化的ClassPathXmlApplicationContext“将一个简单的位置路径视为类路径位置”,即它将“Beans.xml”视为“classpath:Beans.xml”。同样,FileSystemXmlApplicationContext会将“Beans.xml”视为“file:Beans.xml”。 手册的第6.7节也有更多细节。