2017-11-12 7 views
0

클라이언트가 공통 인터페이스를 구현하는 자신의 bean을 클래스에 삽입 할 수 있지만 기본 bean을 사용하는 경우가 있습니다. 예를 들어 외부/타사 Bean으로 Autowired Spring Bean을 대체 할 수있는 방법

:

public class TestClass { 

    // Clients can inject this, otherwise use a default... 
    @Autowired 
    private ConfigInjector configInjector; 

} 

내 정의 된 인터페이스와 기본 구현 : 사용

@Component 
public class ExternalConfigInjector implements ConfigInjector { 
    public String getConfig() { 
     return "EXTERNAL CONFIG" 
    } 
} 

: 외부 클라이언트 내 ConfigInjector 인터페이스의 구현을 주입하고 싶어

public interface ConfigInjector { 
    String getConfig(); 
} 

@Component 
public class DefaultConfigInjector implements ConfigInjector { 
    public String getConfig() { 
     return "DEFAULT CONFIG" 
    } 
} 

@Autowired TestClass, 클라이언트가 TestClass를 사용하려고하면 자신의 ConfigInjector 구현 (ExternalConfigInjector)의 경우, 둘 이상의 ConfigInjector 구현이 존재하므로 NoUniqueBeanDefinitionException 예외가 발생합니다.

그렇다면 어떻게 자신의 ConfigInjector를 사용하여 내 기본 설정을 무시할 수있게 클라이언트와 TestClass를 공유 할 수 있습니까?

답변

0
  1. 당신은 (@Qualifier 주석에게

추천 무료 과정을 사용하여 @primary 주석

  • 를 사용하여 변수/인수
  • 의 이름에 따라 @ConditionalOnProperty 주석
  • 를 사용할 수있다 1.5h) www.udemy.com의 "Spring Framework and Dependency Injection For Beginner"를 참조하십시오. 은 모든 주요 쟁점과 사용 사례를 설명합니다.

  • +0

    기본 주석이 적용되었습니다. 제 질문은 사실 [이 것]과 비슷합니다 (https://stackoverflow.com/questions/10534053/autowiring-two-beans-implementing-same-interface-how-to-set-default-bean-to-au? rq = 1) 또한 주 주석 사용을 제안합니다. 감사! – Kevin

    +0

    환영합니다. 짧은 코스를 시청하는 것이 좋습니다. – nabeel

    관련 문제