2017-02-06 11 views
0

여러 공급자 클래스 (Provider1Provider2)가 있는데 Processor 클래스의 입력 매개 변수에 따라 사용하는 bean을 결정하는 방법은 무엇입니까?런타임 중에 스프링을 결정합니다.

public class Processor{ 
    private Provider provider; 

    public void process(String providerName) throws Exception { 
     // What should I do here to invoke either provider1 or provider2 depending on the providerName? 
     provider.doOperation(); 
    } 
} 

public class Provider1 { 
    public void doOperation(Exchange exchange) throws Exception { 
     //Code 
    } 
} 

public class Provider2 { 
    public void doOperation(Exchange exchange) throws Exception { 
     //Code 
    } 
} 

답변

0

어떻게해야합니까? 프로세서 클래스에

1 # : 당신의 스프링 설정에

public class Processor{ 

    private Map<Provider> providers; 

    public void process(String providerName) throws Exception { 
     Provider provider = providers.get(providerName); 
     provider.doOperation(); 
    } 
} 

2 # :

지금
<bean id="provider1" class="xx.yy.zz.Provider1"/> 
<bean id="provider2" class="xx.yy.zz.Provider2"/> 

<bean id="processor" class="xx.yy.zz.Processor"> 

    <property name="providers"> 
    <map> 
     <entry key="provider1" value-ref="provider1" /> 
     <entry key="provider2" value-ref="provider2" /> 
    </map> 
    </property> 

</bean> 

예를 들어 당신이 processor.process("provider1")를 호출하는 경우, 그것은 이것은이다 provider1.doOperation()

0

호출 케이스는 Factory pattern입니다. 당신은 당신은 응용 프로그램 시작에 registerProvider 메서드를 호출하고 당신이 원하는만큼 제공 업체를 추가 할 수 있습니다 값을 기준으로 제공, 예컨대 :

class ProviderFactory(){ 

    private List<Provider> providers = new ArrayList<>(); 

    public Provider getProvider(String input){ 

     if(input.equals("test1")){ 
      //Find based on criteria 
      return provider1; 
     }else if(input.equals("test2")){ 
      //Find based on criteria 
      return provider2; 
     } 
    } 

    public void registerProvider(Provider provider){ 
     providers.add(provider); 
    } 
} 

을하는 (ProviderFactory) 클래스를 생성하는 모든 업체를 등록하고 얻을 수 있습니다. 초기화 된 후에는 getProvider 메소드를 호출하고 일부 기준에 따라 적절한 인스턴스를 리턴 할 수 있습니다.

providers은 반드시 list 일 필요는 없으며 모든 데이터 구조가 될 수 있습니다. 그것은 어떤 구조가 당신의 기준에 가장 적합한 지에 달려 있습니다.

Here의 공장 패턴에 대한 더 많은 예제입니다.

관련 문제