J'essaie d'utiliser ClassPathXmlApplicationContext dans mon Java code autonome pour charger applicationContext.xml qui se trouve dans un fichier jar qui se trouve dans mon chemin de classe.
ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:**/applicationContext*.xml");
entrée applicationContext.xml comme suit,
<bean id="myAdder" class="com.foo.bar.MyAdder">
<property name="floatAdder" ref="floatAdder"/>
</bean>
Et, lorsque j'essaie de charger un bean de cette façon, j'obtiens NoSuchBeanException. Un bean ne peut-il pas être chargé de cette manière?
Le fichier jar est ajouté à mon chemin de classe en tant que dépendance maven. Quand je vois le Java Build Path dans Eclipse pour ce projet, je vois ce pot lié comme M2_REPO /.../ ..
Je supposais que je pouvais charger le bean dans le fichier jar car le jar est dans classpath de cette façon. Suis-je en train de manquer quelque chose?
Merci, Abi
Cela devrait fonctionner, j'ai juste créé les 2 projets et vérifié.
Le projet A (projet Maven standard créé avec STS) a applicationContext.xml
dans 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>
Projet B:
pom.xml: identique à A, sauf que A est ajouté en tant que dépendance:
<dependency>
<groupId>org.D</groupId>
<artifactId>A</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Start.Java dans le projet 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 d'abord, puis exécutez Start dans le projet B.
Avez-vous vraiment besoin du classpath*:
préfixe sur cet emplacement? (Est-ce *
légal?) Je m'attendais à quelque chose de plus:
ApplicationContext context = new ClassPathXmlApplicationContext("**/applicationContext*.xml);