복붙노트

[SPRING] 유형별로 참조 빈을 Autowire로 나열

SPRING

유형별로 참조 빈을 Autowire로 나열

데몬 유형의 객체 목록을 가진 하나의 클래스가 있습니다.

class Xyz {    
    List<Daemon> daemons;
}

내 봄 구성은 다음과 같습니다.

<bean id="xyz" class="package1.Xyz">
   <property name="daemons" ref="daemonsList">
</bean>

<bean id="daemon1" class="package1.DaemonImpl1"/>
<bean id="daemon2" class="package1.DaemonImpl2"/>

<bean id="daemonsList" class="java.util.ArrayList">
        <constructor-arg>
            <list>
                <ref bean="daemon1" />      
                <ref bean="daemon2" />
            </list>
        </constructor-arg>
</bean>

이제 목록에 각 데몬 구현을 명시 적으로 연결하는 대신 목록에 Daemon 유형의 모든 bean을 자동으로 autowire 할 수 있습니다. 내가 해결하려고하는 문제 누군가가 Daemon 클래스의 새로운 구현 Bean을 생성하고 그것을 목록에 연결하는 것을 잊어 버린 경우.

어딘가에 stackoverflow 있지만이 다시 찾을 수없는이 질문을 보았다. 그것을위한 사과.

해결법

  1. ==============================

    1.그것은 (XML에서 ArrayList 빈 제거) 이렇게 작동합니다.

    그것은 (XML에서 ArrayList 빈 제거) 이렇게 작동합니다.

    public Class Xyz {    
    
        private List<Daemon> daemons;
    
        @Autowired
        public void setDaemons(List<Daemon> daemons){
            this.daemons = daemons;
        }
    
    }
    

    XML에서이 작업을 수행 할 방법이 없다고 생각합니다.

    만나다: 3.9.2. @Autowired 및 @Inject :

    public class MovieRecommender {
    
      @Autowired
      private MovieCatalog[] movieCatalogs;
    
      // ...
    }
    
    public class MovieRecommender {
    
      private Set<MovieCatalog> movieCatalogs;
    
      @Autowired
      // or if you don't want a setter, annotate the field
      public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) {
          this.movieCatalogs = movieCatalogs;
      }
    
      // ...
    }
    

    BTW에서는 Spring 4.x부터 @Ordered 메커니즘을 사용하여 이러한 목록을 자동으로 정렬 할 수 있습니다.

  2. from https://stackoverflow.com/questions/7446301/autowire-reference-beans-into-list-by-type by cc-by-sa and MIT license