2016-08-12 2 views
0

봄에 이름이 같은 빈의 그룹 이름이 있습니다. 예를 들어 콩 A, B, C, D, EI가 콩 A, B, C를로드 할 수 있어야합니다. 이름이 group1이고 이름이 group2 인 Bean, D를로드하십시오.동일한 이름을 가진 빈의 이름 그룹

+0

어쩌면 다른 bean을 주입 한 bean group1을 만들 수 있습니까? 오브제는 무엇입니까? – DamienB

+0

오브젝트는 무엇입니까? – pppavan

+0

왜 하시겠습니까? 이유가 있습니까? 아니면 하나의 항목으로 많은 빈을 호출하는 것일까? – DamienB

답변

0

@Autowire 필드에 @Qualifier("mySpecialImplementation")을 추가하여로드 할 인터페이스 구현을 지정할 수 있습니다. 따라서 귀하의 구현은 @Component("mySpecialImplementation")으로 표시되어야합니다.

기본적으로 구체적인 구현에 고유 한 (문자열) 식별자를 지정합니다. 특정 구현을로드하려면 한정자 주석으로 ID를 지정하십시오.

"그룹"의 bean을로드해야하는 경우 :이 그룹 내에서로드 할 모든 bean에 대한 자동 유선 필드를 포함하는 새로운 "그룹 bean"을 작성하십시오. 새로운 "group-bean"을 주입하면 그룹 내의 다른 모든 bean도로드됩니다.

예 : 기본적으로 그래서

@Autowire 
ApplicationContext context; 

List<Object> loadBeanGroup(List<String> beanNames){ 
    List<Object> result = new LinkedList<>(); 
    for(String name: beanNames){ 
     result.add(context.getBean(name)); 
    } 
    return result; 
} 

당신이 :

@Autowired 
Group1 group1; 
당신이 정말로 목록을로드해야하는 경우

, 그리고 미리 정의 된 그룹의 일종으로

@Service 
class Group1 { 
    @Autowired 
    private A a; 
    @Autowired 
    private B b; 
    @Autowired 
    private C c; 
    ... 
} 

@Service 
class Group2 { 
    @Autowired 
    private D d; 
    @Autowired 
    private E e; 
    ... 
} 

로드를 빈 이름 (그룹)으로 문자열 목록을 정의 할 수 있습니다. 목록에있는 모든 빈을로드하십시오.

+0

iost처럼로드 할 여러 bean이 필요합니다. – pppavan

+0

바로 위에서 설명한 것입니다. 코드 예제를 통해 솔루션을 명확하게 설명하겠습니다. 내 게시물을 수정하겠습니다. – gorootde

+0

여기 동적 인 게 아니야 .. 내 경우에는 좀 더 다이나믹해야한다.지도를 autowiring하는 것처럼. – pppavan

관련 문제