我试图在我的Java独立代码中使用ClassPathXmlApplicationContext来加载位于我的类路径中的jar文件内部的applicationContext.xml。
ClassPathXmlApplicationContext
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吗?
NoSuchBeanException
jar文件作为maven依赖项添加到我的类路径中。当我在该项目的Eclipse中看到Java Build Path时,看到该jar链接为M2_REPO /…/.。
我以为我可以在jar文件中加载bean,因为jar是以这种方式位于类路径中。我想念什么吗?
谢谢
这应该工作,我刚刚创建了2个项目并进行了检查。
项目A(使用STS创建的标准Maven项目)applicationContext.xml位于src / main / resources中。
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首先安装A,然后在项目B中运行“启动”。