[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.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 겹쳐 쓰기
from https://stackoverflow.com/questions/11833804/overriding-bean-configuration-in-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 데이터 PageImpl이 올바른 크기의 페이지를 반환하지 않습니까? (0) | 2019.04.07 |
---|---|
[SPRING] Spring 클래스 EnvironmentCapable (0) | 2019.04.07 |
[SPRING] MockRestServiceServer로 REST 호출 조롱 (0) | 2019.04.07 |
[SPRING] @Configuration과 @Bean 어노테이션으로 작업하는 Spring (0) | 2019.04.07 |
[SPRING] "이름이 '제품'인 지속성 단위가 없습니다. ' (0) | 2019.04.07 |