일치하는 콩이 두 개 이상 발견될 때 스프링은 어떻게 이름으로 자동 배선됩니까?
다음과 같은 인터페이스가 있다고 가정합니다.
interface Country {}
class USA implements Country {}
class UK implements Country ()
이 설정 xml의 단편은 다음과 같습니다.
<bean class="USA"/>
<bean id="country" class="UK"/>
<bean id="main" class="Main"/>
아래 자동배선되는 의존관계를 제어하려면 어떻게 해야 합니까?영국 걸로 주세요.
class Main {
private Country country;
@Autowired
public void setCountry(Country country) {
this.country = country;
}
}
Spring 3.0.3을 사용하고 있습니다.풀어주다.
이는 스프링 3.0 매뉴얼의 섹션 3.9.3에 설명되어 있습니다.
폴백 일치의 경우 빈 이름은 기본 수식자 값으로 간주됩니다.
즉, 기본 동작은 다음과 같습니다.@Qualifier("country")세터 메서드로 이동합니다.
@Qualifier 주석을 사용할 수 있습니다.
한정자를 사용한 주석 기반 자동 배선 미세 조정
유형별 자동 배선은 여러 명의 후보자를 발생시킬 수 있으므로 선택 프로세스를 더 잘 제어할 필요가 있는 경우가 많습니다.이를 위한 한 가지 방법은 Spring의 @Qualifier 주석을 사용하는 것입니다.이를 통해 수식자 값을 특정 인수에 연관지을 수 있으며 각 인수에 대해 특정 빈이 선택되도록 유형 일치 세트를 좁힐 수 있습니다.가장 단순한 경우, 이것은 알기 쉬운 값일 수 있습니다.
class Main {
private Country country;
@Autowired
@Qualifier("country")
public void setCountry(Country country) {
this.country = country;
}
}
UK를 사용하여 USA bean에 ID를 추가하고 USA를 원하는 경우 사용합니다.
같은 결과를 얻는 또 다른 방법은 @Value 주석을 사용하는 것입니다.
public class Main {
private Country country;
@Autowired
public void setCountry(@Value("#{country}") Country country) {
this.country = country;
}
}
이 경우,"#{country}string은 Spring Expression Language(SPEL; 봄식 언어) 표현으로 다음 이름의 빈을 평가합니다.country.
이름별로 해결 방법을 하나 더 소개합니다.
@Resource(name="country")
javax.annotation 패키지를 사용하기 때문에 Spring 고유의 패키지는 아니지만 Spring이 지원합니다.
경우에 따라 @Primary 주석을 사용할 수 있습니다.
@Primary
class USA implements Country {}
이렇게 하면 기본 자동배선 후보로 선택되므로 다른 쪽 빈에서 자동배선 후보가 필요하지 않습니다.
mo deatils 에 대해서는, 「두 개의 콩의 자동 배선 실장」을 참조해 주세요.「 default bean 」를 autowire로 설정하는 방법.
언급URL : https://stackoverflow.com/questions/4447877/how-does-spring-autowire-by-name-when-more-than-one-matching-bean-is-found
'programing' 카테고리의 다른 글
| MongoDB에 있는 모든 컬렉션을 내보내려면 어떻게 해야 합니까? (0) | 2023.03.25 |
|---|---|
| 스프링 MVC + JSON = 406 사용 불가 (0) | 2023.03.06 |
| ajax.done 내의 함수에는 어떤 인수가 제공됩니까? (0) | 2023.03.06 |
| 입력 숨김 필드에 반환 json 값 저장 (0) | 2023.03.06 |
| Toad 대체 방법 (0) | 2023.03.06 |