2015-01-15 16 views
0

정리 방법을 알아 내려고하는 기존 코드가 있습니다. 내가 생각한 한 가지 해결책은 내가 주어진 enum 값을 기반으로 사용자 정의 처리기를 삽입 할 수 있다는 것입니다. enum을 기반으로 한 Injection을받을 수 있습니까? 나는 이런 식으로 생각하고있다. (의사 코드)Enum에 기반한 주사를 맞출 수 있습니까?

@Service(MyEnum.MYVALUE, MyEnum.MYOTHERVALUE) // produces a handler given these enums 
public class MyHandler { ... } 

@Service(MyEnum.ANOTHERVALUE) 
public class AnotherHandler {... } 

// .... some mystical way of telling spring what my current enum context is so I can get the right handler 

답변

0

나는 이것이 작동하지 않을 것이라고 생각한다.

우선 @Service에 대한 valueEnum[]이 아니라 String입니다. 그리고, 그것은 단지 그 서비스 클래스를 위해 등록 된 bean의 이름을 제안합니다.

대신에 내가 사용하기를 원하는 것은 @Qualifier입니다.

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER}) 
@Qualifier 
public @interface MyQualifier { ... } 

@Service 
@MyQualifier 
public class FooHandler implements IHandler { ... } 

@Component 
public class MyClass { 
    @Autowired @MyQualifier 
    private IHandler handler; 

    ... 
} 

은 자세한 내용은 Fine-tuning annotation-based autowiring with qualifiers를 참조하십시오 : 당신처럼, 자신 만의 한정자 주석을 만들 수

@Service 
@Qualifier("foo") 
public class FooHandler implements IHandler { ... } 

@Service 
@Qualifier("bar") 
public class BarHandler implements IHandler { ... } 

@Component 
public class MyThing { 
    @Autowired @Qualifier("foo") 
    private IHandler handler; 

    ... 
} 

또는 : 그래서, 당신은 같은 뭔가를 할 수 있습니다.

+0

실제로'@Service' 매개 변수가 열거 형이라고 제안하지 않았으므로 "의사 코드"라고 말했고, 내가 찾고있는 코드가 무엇인지 확실하지 않았습니다. – xenoterracide

0

글쎄, 당신은 자신의 유효성 검사 (네, 열거 형 포함)를 작성한 다음 작업을 수행하고 주석이 달린 필드에 값을 삽입 할 BeanPostProcessor를 제공하려고 할 수 있습니다.

많은 Spring BeanPostProcessors가 있으므로 Spring의 소스를 탐색하여 어떻게 수행되는지 확인할 수 있습니다.