2017-10-21 8 views
1

JEE에서 SpringBoot로 코드를 마이그레이션하고 있습니다. 나는 javax.enterprise.inject.Instance 클래스와 JEE에 멋진 동적 주사를 사용했다 :스프링 주입에서 javax.enterprise.inject.Instance와 동일합니다. 동적 주입

을 그냥 주석 :

@Inject 
private Instance<CCIntentHandler> allMycandidates; 

는 allMycandidates가 내 클래스 경로에 CCIntentHandler 인터페이스를 상속하는 모든 클래스로 가득 할 것이다 다음 내가 할 수있는 다음과 같이 반복합니다.

Iterator<CCIntentHandler> iterator = allMycandidates.iterator() 

아무것도 더 이상 필요하지 않습니다. 스프링 부트에서 어떻게 이것을 할 수 있습니까?

감사

답변

1

봄이 Foo의 모든 인스턴스를 주입 할 것이다 당신 @AutowireList<Foo> 경우. 그래서

의 봄에 해당 ...

@Inject 
private Instance<CCIntentHandler> allMycandidates; 

은 ...입니다 :

마 CCIntentHandler :

@Autowire 
private List<CCIntentHandler> allMycandidates; 

업데이트이 댓글에 응답 한 이 인터페이스를 구현하는 인터페이스 또는 클래스는 모든 Spring 어노테이션이 필요합니까? 다음과 같이

봄이 CCIntentHandler의 인스턴스 알고 있어야합니다,이 얻을 수 :

  • 주석 각 클래스 @ComponentCCIntentHandler을 구현하고 이러한 클래스는
봄 부팅 스캔되어 있는지 확인

또는

  • thod로 CCIntentHandler을 구현하는 클래스를 반환하고 각각의 public 메소드에 @Bean으로 주석을 달고이 public 메소드가 포함 된 클래스에 @Configuration으로 주석을 추가하고이 구성 클래스를 Spring Boot에서 검사하는지 확인합니다.

빈 선언 및 종속성 삽입 in the docs에 대한 자세한 내용입니다.

+0

고마워요! CCIntentHandler 인터페이스 또는이 인터페이스를 구현하는 클래스는 모든 Spring 어노테이션을 필요로합니까? – icordoba

+0

@icordoba 최근 의견을 해결할 수있는 답변을 업데이트했습니다. – glytching