복붙노트

[SPRING] 클래스 패스에있는 jar 파일 안에있는 스프링 애플리케이션 컨텍스트 파일로드하기

SPRING

클래스 패스에있는 jar 파일 안에있는 스프링 애플리케이션 컨텍스트 파일로드하기

내 Java 독립 실행 형 코드에서 ClassPathXmlApplicationContext를 사용하여 내 클래스 경로에있는 jar 파일 안에있는 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이 발생합니다. 이 방법으로 콩을 적재 할 수 없습니까?

jar 파일은 내 클래스 패스에 maven 의존성으로 추가됩니다. Eclipse에서이 프로젝트의 Java 빌드 경로를 볼 때이 jar가 M2_REPO /.../로 링크 된 것을 볼 수 있습니다.

항아리가 클래스 패스에 있기 때문에 jar 파일 내부에 bean을로드 할 수 있다고 가정합니다. 내가 놓친 게 있니?

고마워, Abi

해결법

  1. ==============================

    1.이 작업을해야합니다. 방금 2 개의 프로젝트를 만들고 확인했습니다.

    이 작업을해야합니다. 방금 2 개의 프로젝트를 만들고 확인했습니다.

    프로젝트 A (STS로 생성 된 표준 Maven 프로젝트)는 src / main / resources에 applicationContext.xml을 가지고 있습니다.

    Pom.hml :

    <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을 먼저 설치 한 다음 프로젝트 B에서 시작을 실행하십시오.

  2. ==============================

    2.해당 위치에 classpath * : 접두어가 실제로 필요합니까? (그게 * 합법적입니까?) 나는 더 많은 것을 기대했을 것입니다 :

    해당 위치에 classpath * : 접두어가 실제로 필요합니까? (그게 * 합법적입니까?) 나는 더 많은 것을 기대했을 것입니다 :

    ApplicationContext context = new ClassPathXmlApplicationContext("**/applicationContext*.xml);
    
  3. from https://stackoverflow.com/questions/6303242/loading-spring-application-context-files-that-are-inside-a-jar-in-classpath by cc-by-sa and MIT license