2014-09-11 6 views
0

n Spring 3.2를 사용하여 Spring MVC 웹 앱을 개발 중입니다. 우리는 다른 고객에게 웹 앱을 배포 할 것입니다. 각 고객은 서비스 인터페이스의 여러 구현 중 하나를 사용할 수 있습니다.은 속성 값을 기반으로 Spring bean을 autowire합니다.

고객이이 값을 재설정해야 할 수 있으므로 구현을 응용 프로그램에 하드 와이어 할 수 없으므로 외부에서 구성 할 수 있어야합니다. 우리는 이미 문자열, 숫자 등과 같은 간단한 속성을 설정하기위한 고객 별 속성 파일을 사용하고 있지만 인터페이스의 특정 구현을 설정하는 방법을 묻습니다.

예,

class MyClass { 
// this is straightforward 
@Value("${customer.propertyInPropertyFile}") 
private String customerSpecificString; 

// how to set the correct implementation for each customer? 
private ISomeService service; 

} 

ISomeService 4 구현이있는 경우, 우리는 autowire하기 수 없거나, 이것은 다음 컴파일 된 코드에 설정됩니다 명시 적으로, 빈을 설정 - 그것은 구성 할 필요가있다 응용 프로그램을 배포 한 후 (필요한 경우 응용 프로그램을 다시 시작하는 것이 좋습니다) ..

누구든지이 작업을 수행하는 방법을 알고 있습니까? 이것이 Spring EL 또는 프로파일을 사용하여 더 잘 수행 될 수 있습니까?

감사합니다. -는 config 클래스에 대해 알 필요가

@Configuration 
@Profile("prod") 
@EnableAsync 
public class ProductionConfig extends BaseConfig 
// inject property value which identifies theimplementation to use 
Value("${service.impl}") 
private String serviceName; 

@Bean() 

    public IRepository repository() { 
     IRepository rc = null; 
     if(StringUtils.isEmpty(serviceName)){ 
      rc = new Impl1(); 
     } else if ("sword-mets".equals(serviceName)){ 
      rc = new Impl2(); 
     } else { 
      rc = new Impl3(); 
     } 
     log.info("Setting in repository implementation " + rc); 
     return rc; 

    } 

그래서,이 별명을 사용하여 제안 된 응답으로 매우 깨끗한되지 않습니다 : 내가 자바 구성을 사용하기 원하는대로

+0

[Spring Qualifier와 속성 자리 표시 자] 가능한 복제본 (http://stackoverflow.com/questions/7812745/spring-qualifier-and-property-placeholder) –

+0

[spring profiles] (https :// /spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile/). –

+0

첫 번째 링크를 살펴 보았는데, 별칭과 XML 구성을 사용하고 있습니다. 자바 주석 구성을 사용하고 싶었지만 어노테이션 값이 컴파일 타임 상수이기 때문에 불가능할 수도 있습니다. Spring 설정 파일에서 동일한 $ {} 표기법이 Maven 빌드 중에 대체 된 변수를 식별하므로 컴파일 타임에 빌드 할 때 대체되는 속성을 구별하는 방법을 알아야합니다. – otter606

답변

0

그래서, 나는 다음과 같은 솔루션을 사용 모든 가능한 구현 클래스 -하지만 간단하고이 콩 그냥 XML 구성을 사용하지 않아도됩니다.

관련 문제