[SPRING] 런타임 스프링에 삽입 할 구현 선택
SPRING런타임 스프링에 삽입 할 구현 선택
나는 다음 수업을 듣는다 :
public interface MyInterface{}
public class MyImpl1 implements MyInterface{}
public class MyImpl2 implements MyInterface{}
public class Runner {
@Autowired private MyInterface myInterface;
}
앱이 이미 실행 중일 때 (즉, 시작 단계가 아니라면) 어떤 구현을 러너에 주입해야하는지 결정하고 싶습니다.
이렇게 이상적으로 이런 식으로 :
ApplicationContext appContext = ...
Integer request = ...
Runner runner = null;
if (request == 1) {
//here the property 'myInterface' of 'Runner' would be injected with MyImpl1
runner = appContext.getBean(Runner.class)
}
else if (request == 2) {
//here the property 'myInterface' of 'Runner' would be injected with MyImpl2
runner = appContext.getBean(Runner.class)
}
runner.start();
가장 좋은 방법은 무엇입니까?
해결법
-
==============================
1.@Component ( "implForRq1") 및 @Component ( "implForRq2")를 사용하여 구현을 선언하십시오.
@Component ( "implForRq1") 및 @Component ( "implForRq2")를 사용하여 구현을 선언하십시오.
그런 다음 둘 다 주입하고 다음을 사용하십시오.
class Runner { @Autowired @Qualifier("implForRq1") private MyInterface runnerOfRq1; @Autowired @Qualifier("implForRq2") private MyInterface runnerOfRq2; void run(int rq) { switch (rq) { case 1: runnerOfRq1.run(); case 2: runnerOfRq2.run(); ... } } } ... @Autowired Runner runner; void run(int rq) { runner.run(rq); }
from https://stackoverflow.com/questions/19231875/choose-which-implementation-to-inject-at-runtime-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC에서 Form없이 Multipart 사용하기 (0) | 2019.01.05 |
---|---|
[SPRING] Spring 데이터 Solr 다중 코어 및 저장소 (0) | 2019.01.05 |
[SPRING] 403 금지 된 오류 아약스 GET 요청 봄 (0) | 2019.01.05 |
[SPRING] Maven + Spring + 동적 웹 모듈 (Eclipse) = java.lang.ClassNotFoundException : org.springframework.web.context.ContextLoaderListener (0) | 2019.01.05 |
[SPRING] org.aspectj.weaver.reflect.ReflectionWorld를 찾을 수 없습니다. (0) | 2019.01.05 |