[SPRING] 자동 와이어 링 및 고유 빈 없음의 문제점
SPRING자동 와이어 링 및 고유 빈 없음의 문제점
2 클래스 (B, C) 클래스 A 확장합니다.
@Service
public class A extends AbstratClass<Modele>{
@Autowired
A(MyClass br) {
super(br);
}
@Service
public class B extends A{
@Autowired
B (MyClass br) {
super(br);
}
@Service
public class C extends A{
@Autowired
C (MyClass br) {
super(br);
}
그러나 나는이 메시지를 가지고있다.
나는 정말로 왜이 메시지를 가지고 있는지 & 봄 문서를 읽은 후에도 해결할 방법을 얻지 못한다.
미리 감사드립니다.
해결법
-
==============================
1.@Qualifier 주석을 사용하여 수업을 다시 작성해야합니다.
@Qualifier 주석을 사용하여 수업을 다시 작성해야합니다.
@Service @Qualifier("a") public class A extends AbstratClass<Modele>{ @Autowired A(MyClass br) { super(br); } @Service @Qualifier("b") public class B extends A{ @Autowired B (MyClass br) { super(br); } @Service @Qualifier("c") public class C extends A{ @Autowired C (MyClass br) { super(br); }
또한 Spring bean을 autowiring하는 A 유형의 인스턴스에 @Qualifier 어노테이션을 사용해야한다.
이 같은:
public class Demo { @Autowired @Qualifier("a") private A a; @Autowired @Qualifier("b") private A a2; public void demo(..) {..} }
프로덕션 코드에서이 Spring 구성을 갖고 싶지 않다면 XML 또는 Java 구성을 사용하여 종속성 삽입 로직을 작성해야합니다.
유형 A를 확장하는 서비스 클래스 중 하나 위에 @Primary 주석을 사용하여 유형 A의 기본 bean을 지정할 수도 있습니다. 그런 다음 Spring은 @Qualifier 주석을 지정하지 않고 autowire 할 수 있습니다.
Spring은 어떤 bean을 삽입 할 것인지를 결코 추측하지 않으므로, 타입의 하나 이상의 bean만큼 @Primary로 어느 것을 표시할지 지정해야한다.
-
==============================
2.당신은 A 타입의 bean을 autowire하려고 (다른 곳에서) 노력하고있다.
당신은 A 타입의 bean을 autowire하려고 (다른 곳에서) 노력하고있다.
@Autowired private A beanA;
그러나 당신은 이것을 준수하는 2 개의 콩을 가지고 있습니다.
@Resource를 사용하고 정확히 어떤 bean을 지정하여 이것을 해결할 수 있습니다 :
@Resource("b") private A beanA;
(여기서 "b"는 삽입 된 빈의 이름 임) 또는 @Qualifier 주석을 사용합니다.
-
==============================
3.일반적으로 같은 클래스의 두 빈을 정의하면이 오류가 발생합니다.
일반적으로 같은 클래스의 두 빈을 정의하면이 오류가 발생합니다.
<bean id="a" class="com.package.MyClass"/> <bean id="b" class="com.package.MyClass"/>
위의 두 줄을 처리하면 동일한 클래스의 두 콩이 생깁니다.
다른 클래스에서이 클래스를 자동 응답하려고하면이 유형의 오류가 발생합니다.
두 가지 해결책이 있습니다.
첫 번째 방법
두 번째 방법
JSR250 API를 사용하십시오 (클래스 경로에 넣을 수있는 jar 파일).
그런 다음 아래의 autowriring을 수행하십시오.
@Resource("a") MyClass a @Resource("b") MyClass a
from https://stackoverflow.com/questions/2699608/problem-with-autowiring-no-unique-bean by cc-by-sa and MIT license