2015-01-21 5 views
10

내 봄용 콩을 정의하기 위해 @ComponentScan@Component을 사용하고 있습니다. 내가 원한 것은 콩 중 하나를 autowire-candidate=false으로 선언하는 것입니다.주석을 사용할 때 Spring bean을 선언하는 방법 autowire-candidate = "false"?

이것은 xml의이 속성을 사용하여 수행 할 수 있습니다. 어노테이션에 상응하는 것이 없습니까?

동일한 인터페이스의 구현이 2 개이고 @Qualifier을 사용하지 않으려는 이유가 여기에 있습니다.

EDIT : @Primary를 사용하는 것이 유효한 해결 방법이지만 autowire-candidate은 저 자신의 의미론을 가진 유용한 기능처럼 보입니다.

감사

+2

'@ Primary'에 선호하는 주석을 달아주세요. 그런 식으로'@ 한정자 '를 사용할 필요가 없습니다. –

+0

의견을 주셔서 감사합니다. 예, 실제로이 문제를 극복하기위한 방법 중 하나입니다. 그러나 주석에 autowire-candidate가없는 이유는 무엇입니까? –

+2

Spring이'autowire-candidate = false' 개념을 거부하고 더 이상 지원되지 않는 것처럼 보입니다. 주석이있는 아날로그는 없으므로 '@ 초등 회'는주의를 기울이는 것입니다. –

답변

5

봄이 autowire-candidate=false 개념을 거부하여 더 이상 지원처럼 보인다. 특수 효과가있는 아날로그는 없으므로 @Primary이 주목할만한 최고의 해결 방법입니다.

org.springframework.beans.factory.support.AutowireCandidateResolver을 사용하는 것이 좋습니다.이 방법은 DefaultListableBeanFactory에서 사용되며, autowire 후보에서 원하지 않는 빈을 제외하는 논리를 사용합니다. 이 경우 기술은 autowire-candidate=false에 사용 된 기술과 비슷하게 SimpleAutowireCandidateResolver에 있습니다.

0

빈 액세서를 사용하여 시각적으로 조정할 수도 있습니다.

당신은 다음 @AutowireBean 클래스와이 클래스 '정의로

를 (여러 일치 콩에 대해 불평하지 않고) public 콩을 autowire하기 할 수

@Configuration 
public abstract class VisibilityConfiguration { 

    @Bean 
    public Bean publicBean() { 
     Bean bean = new Bean(); 
     bean.setDependency(hiddenBean()); 
     return bean; 
    } 

    @Bean 
    protected Bean hiddenBean() { 
     return new Bean("protected bean"); 
    } 
} 

Bean visibility를 참조 (내장 제외) 허용되지 않음 private/protected 접근 자 해결 모든 빈을 인스턴스화 것 인 @Configuration 클래스를 사용 보호/비공개를 숨기고 (대신 직접 클래스 @Service \ @Component 주석) 에게

는 또한 패키지로 보호 된 접근 가치가 시도 숨길 수

을하면서 대중 콩을 게시하는 것 @Component 주석이 달린 클래스입니다. 그게 효과가 있을지 모르겠다.

관련 문제