example - que es un bean en spring
Cargando archivos de contexto de aplicaciĆ³n de primavera que se encuentran dentro de un jar en classpath (2)
¿Realmente necesitas el classpath*:
prefijo en esa ubicación? (¿Es eso *
legal?) Hubiera esperado algo más como:
ApplicationContext context = new ClassPathXmlApplicationContext("**/applicationContext*.xml);
Estoy tratando de usar ClassPathXmlApplicationContext en mi código java independiente para cargar applicationContext.xml que está dentro de un archivo jar que está en mi ruta de clase.
ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:**/applicationContext*.xml");
entrada applicationContext.xml de la siguiente manera,
<bean id="myAdder" class="com.foo.bar.MyAdder">
<property name="floatAdder" ref="floatAdder"/>
</bean>
Y, cuando intento cargar un bean de esa manera, obtengo NoSuchBeanException. ¿No puede un frijol cargado de esta manera?
El archivo jar se agrega a mi classpath como una dependencia de maven. Cuando veo la ruta de compilación Java en Eclipse para este proyecto, veo este archivo jar como M2_REPO /.../ ..
Estaba asumiendo que puedo cargar el bean dentro del archivo jar ya que el jar está en classpath de esta manera. ¿Me estoy perdiendo de algo?
Gracias, Abi
Esto debería funcionar, acabo de crear los 2 proyectos y verifiqué.
El Proyecto A (proyecto estándar de Maven creado con STS) tiene applicationContext.xml
en 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>
Proyecto B:
pom.xml: igual que A, excepto que A se agrega como dependencia:
<dependency>
<groupId>org.D</groupId>
<artifactId>A</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Start.java en el proyecto 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 instala A primero, luego ejecuta Start en el proyecto B.