복붙노트

[SPRING] 봄에 빈 구성 무시

SPRING

봄에 빈 구성 무시

두 개의 모듈이 있다고 가정 해 보겠습니다. 하나는 핵심이고 다른 하나는 핵심 종속 구현 모듈입니다. 코어는 종속 구현 모듈 전쟁을위한 jar 파일입니다.

핵심에는 다음과 같이 정의 된 bean이 있습니다.

<bean id="x" class="com.pokuri.X">
 <property name="y" ref="y"/>
 <property name="z" ref="z"/>
</bean>

그리고 그 수업은 다음과 같은 방법을 가지고 있습니다.

public class X{

  public void doSomeJob(){
   .......
  }   

}

이 메소드는 일부 핵심 클래스에서 호출되고있다. 이제 코어 종속 구현에 따라 doSomeJob () 메소드의 로직을 변경해야합니다. 그래서 저는이 수업을 만듭니다.

public class ExtX extends X{

  @override
  public void doSomeJob(){
    // changed logic
  }

}

이 같은 다른 응용 프로그램 컨텍스트 xml 파일에서 동일한 ID로 Bean을 정의했습니다.

<bean id="x" class="com.pokuri.ExtX">
     <property name="y" ref="y"/>
     <property name="z" ref="z"/>
</bean>

classpath : springfolder로 값을 지정하는 web.xml의 contextConfigLocation 컨텍스트 매개 변수를 사용하여 응용 프로그램 컨텍스트를 작성합니다.

하지만 핵심 로직에서 Extra가 아닌 핵심 빈 인스턴스 (X 인스턴스) 만 얻고 있습니다. 우리는 어떻게 그 bean 정의를 오버라이드 할 수 있고 새로운 확장 bean 정의를 사용하여 시스템을 시작할 수 있습니까?

그리고 다른 애플리케이션 컨텍스트 파일에서 동일한 ID를 사용하면 나중에로드 된 bean 정의가있는 첫 번째로드 된 bean 정의를 겹쳐 쓸 것이라고 들었습니다. Bean 정의에 속성의 우선 순위 종류가 있는가? 동일한 ID를 가진 Bean이 발견되었을 때 ApplicationContext가 우선 순위가 가장 높은 우선 순위를 사용하여 우선 순위가 낮은 우선 순위를 고려하도록한다.

해결법

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

    1.Bean 정의를 오버라이드하는 한 가지 방법은 사용자가 지정한 것과 동일한 ID를 여러 번 정의하고 동일한 ID를 가진 마지막 빈 정의가 적용되는 것입니다. 따라서 ExtX가 마지막으로로드 된 것을 확인했다면, 그냥 작동해야하며, 이것을 warpath 파일에서 할 수 있도록하려면 classpath : springfolder라고 말하면서로드하는 대신에, 당신의 명시 적으로 코어 구성을 가져올 수 있습니다. war의 Spring 설정 파일을 열고 다음과 같이 bean을 오버라이드한다 :

    Bean 정의를 오버라이드하는 한 가지 방법은 사용자가 지정한 것과 동일한 ID를 여러 번 정의하고 동일한 ID를 가진 마지막 빈 정의가 적용되는 것입니다. 따라서 ExtX가 마지막으로로드 된 것을 확인했다면, 그냥 작동해야하며, 이것을 warpath 파일에서 할 수 있도록하려면 classpath : springfolder라고 말하면서로드하는 대신에, 당신의 명시 적으로 코어 구성을 가져올 수 있습니다. war의 Spring 설정 파일을 열고 다음과 같이 bean을 오버라이드한다 :

    <import resource="core-resource.xml"/>
    <bean id="x" class="com.pokuri.ExtX">
         <property name="y" ref="y"/>
         <property name="z" ref="z"/>
    </bean>
    

    이렇게하면 재정의 된 bean이 적용됩니다.

    여기에서 사용할 수있는 우선 순위 / 순서 필드는 없습니다. 원하는 경우 Map 을 매개 변수로 제공하여 유형의 모든 bean 정의를로드하고 order 속성을 기대하여 정렬 할 수 있습니다. 그런 식으로 사용하십시오.하지만 더 많은 작업이 필요합니다.

    두 번째 접근법은 다음과 같습니다 : 하위 컨텍스트에서 상위 컨텍스트에 정의 된 Bean 겹쳐 쓰기

  2. from https://stackoverflow.com/questions/11833804/overriding-bean-configuration-in-spring by cc-by-sa and MIT license