在类路径中加载jar内的弹簧应用程序上下文文件 [英] Loading spring application context files that are inside a jar in classpath

查看:89
本文介绍了在类路径中加载jar内的弹簧应用程序上下文文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的java独立代码中使用ClassPathXmlApplicationContext来加载我的类路径中的jar文件中的applicationContext.xml。

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

applicationContext.xml条目如下,

 < bean id =myAdderclass =com.foo.bar.MyAdder> 
< property name =floatAdderref =floatAdder/>
< / bean>

而且,当我尝试加载一个bean时,我得到了NoSuchBeanException。不能以这种方式加载bean?



将jar文件作为一个maven依赖项添加到我的类路径中。当我在Eclipse中看到这个项目的Java构建路径时,我看到这个jar链接为M2_REPO /.../..



我假设我可以加载bean在jar文件中,jar是以类路径这样的方式。我是否缺少某些东西?



谢谢Abi

解决方案

工作,我刚刚创建了2个项目并检查。



项目A(使用STS创建的标准Maven项目)具有 applicationContext.xml 在src / main / resources。



pom.xml:

 < project xmlns =http ://maven.apache.org/POM/4.0.0xmlns: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>

<依赖关系>
<依赖关系>
< groupId> org.springframework< / groupId>
< artifactId> spring-context< / artifactId>
< version> $ {spring.version}< / version>
< / dependency>
< / dependencies>
< / project>

applicationContext.xml:

 <?xml version =1.0encoding =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 =myAdderclass =com.foo.bar.MyAdder>
< property name =foovalue =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首先,在项目B中运行开始。


I am trying to use ClassPathXmlApplicationContext in my java standalone code to load applicationContext.xml that is inside a jar file which is in my class path.

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

applicationContext.xml entry as follows,

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

And, when I try to load a bean that way I am getting NoSuchBeanException. Can't a bean by loaded in this way?

The jar file is added to my classpath as a maven dependency. When I see the Java Build Path in Eclipse for this project, I see this jar linked as M2_REPO/.../..

I was assuming I can load the bean inside the jar file as the jar is in classpath this way. Am I missing something?

Thanks,Abi

解决方案

This should work, I just created the 2 projects and checked.

Project A (standard Maven project created with STS) has 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>

Project B:

pom.xml: same as A, except A is added as dependency:

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

Start.java in project 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 first, then run Start in project B.

这篇关于在类路径中加载jar内的弹簧应用程序上下文文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆