it-swarm.com.de

Laden von Kontextdateien für Spring-Anwendungen, die sich in einer JAR-Datei im Klassenpfad befinden

Ich versuche, ClassPathXmlApplicationContext in meinem Java eigenständigen Code zu verwenden, um applicationContext.xml zu laden, das sich in einer JAR-Datei befindet, die sich in meinem Klassenpfad befindet.

ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:**/applicationContext*.xml");

applicationContext.xml-Eintrag wie folgt,

 <bean id="myAdder" class="com.foo.bar.MyAdder">
        <property name="floatAdder" ref="floatAdder"/>        
    </bean>

Und wenn ich versuche, eine Bean auf diese Weise zu laden, erhalte ich die NoSuchBeanException. Kann eine Bohne nicht auf diese Weise geladen werden?

Die JAR-Datei wird meinem Klassenpfad als Maven-Abhängigkeit hinzugefügt. Wenn ich den Build-Pfad Java für dieses Projekt in Eclipse sehe, wird diese JAR-Datei als M2_REPO /.../ .. verknüpft.

Ich ging davon aus, dass ich die Bean in die JAR-Datei laden kann, da sich die JAR auf diese Weise im Klassenpfad befindet. Vermisse ich etwas?

Danke, Abi

28
Abhishek

Das sollte funktionieren, ich habe gerade die 2 Projekte angelegt und geprüft.

Projekt A (mit STS erstelltes Standard-Maven-Projekt) hat applicationContext.xml in 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>

Projekt B:

pom.xml: wie A, außer dass A als Abhängigkeit hinzugefügt wird:

<dependency>
   <groupId>org.D</groupId>
   <artifactId>A</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</dependency>

Start.Java in Projekt B:

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 zuerst, dann starte in Projekt B.

35
abalogh

Brauchen Sie wirklich die classpath*: Präfix an diesem Ort? (Ist dass * legal?) Ich hätte etwas mehr erwartet:

ApplicationContext context = new ClassPathXmlApplicationContext("**/applicationContext*.xml);
1
Darien