JavaスタンドアロンコードでClassPathXmlApplicationContextを使用して、クラスパスにあるjarファイル内のapplicationContext.xmlをロードしようとしています。
ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:**/applicationContext*.xml");
次のapplicationContext.xmlエントリ、
<bean id="myAdder" class="com.foo.bar.MyAdder">
<property name="floatAdder" ref="floatAdder"/>
</bean>
そして、そのようにBeanをロードしようとすると、NoSuchBeanExceptionが発生します。この方法でBeanをロードすることはできませんか?
Jarファイルは、Maven依存関係としてクラスパスに追加されます。このプロジェクトのEclipseでJava Build Pathを見ると、このjarがM2_REPO /.../。としてリンクされていることがわかります。
このようにjarがクラスパスにあるため、jarファイル内にBeanをロードできると想定していました。何か不足していますか?
ありがとう、アビ
これでうまくいくはずです。2つのプロジェクトを作成して確認しました。
プロジェクトA(STSで作成された標準のMavenプロジェクト)にはapplicationContext.xml
src/main/resources内。
pom.xml:
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.D</groupId>
<artifactId>A</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<spring.version>3.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
applicationContext.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.xsd">
<bean id="myAdder" class="com.foo.bar.MyAdder">
<property name="foo" value="bar" />
</bean>
</beans>
プロジェクトB:
pom.xml:Aと同じですが、Aが依存関係として追加されます。
<dependency>
<groupId>org.D</groupId>
<artifactId>A</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
プロジェクトBのStart.Java:
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"classpath*:**/applicationContext*.xml");
MyAdder myAdder = (MyAdder) context.getBean("myAdder");
System.out.println(myAdder.getFoo());
}
mvn install Aを最初に実行してから、プロジェクトBでStartを実行します。
本当に必要ですかclasspath*:
その場所のプレフィックス? (それは*
合法ですか?)私はもっと似たようなものを期待していたでしょう:
ApplicationContext context = new ClassPathXmlApplicationContext("**/applicationContext*.xml);