복붙노트

[SPRING] Spring 구성 파일에서 <util : list>를 다시 사용할 수 있습니까?

SPRING

Spring 구성 파일에서 를 다시 사용할 수 있습니까?

나는 일련의 클래스들에 주입 될 규칙들을 가지고 있는데, 다음과 같다.

<bean id="rule1" class="com.vikdor.rules.Rule1" />
<bean id="rule2" class="com.vikdor.rules.Rule2" />
<bean id="rule3" class="com.vikdor.rules.Rule3" />
<bean id="rule4" class="com.vikdor.rules.Rule4" />
<bean id="rule5" class="com.vikdor.rules.Rule5" />

<util:list id="commonRules">
    <ref bean="rule1" />
    <ref bean="rule3" />
    <ref bean="rule5" />
</util:list>

<util:list id="normalInvRules">
   <!-- Include common rules -->
   <ref bean="rule4" />
</util:list>

<util:list id="prepaidInvRules">
   <!-- Include common rules -->
   <ref bean="rule2" />
</util:list>

normalInvRules 및 prepaidInvRules에 해당하는 목록에 공통 규칙 목록을 포함하려면 어떻게해야합니까?

규칙 수 (예 : rule1, rule2 등)가 많고 숫자 그룹 (normalInvRules, prepaidInvRules 등)도 많습니다. 그래서 일반적인 규칙을 반복하지 않고 특정 목록 만 나열하고 공통 목록에 대한 참조를 포함하는 방법이 있는지 궁금합니다.

해결법

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

    1.이 작업을 정확하게 수행하는 '컬렉션 병합'기능이 있습니다. 3.3.3.4.1 절 참조. Spring 문서의 "Collection merging" 또는 주제에 쓴 2008 년 블로그 게시물 (예를 들어).

    이 작업을 정확하게 수행하는 '컬렉션 병합'기능이 있습니다. 3.3.3.4.1 절 참조. Spring 문서의 "Collection merging" 또는 주제에 쓴 2008 년 블로그 게시물 (예를 들어).

  2. ==============================

    2.@GreyBeardedGeek에서 제안한 접근 방식이 마음에 듭니다. 단지 몇 가지 제안을 던지고 싶습니다.

    @GreyBeardedGeek에서 제안한 접근 방식이 마음에 듭니다. 단지 몇 가지 제안을 던지고 싶습니다.

    에이. xml의 ​​기본 규칙 목록을 사용하여 @Configuration을 사용하여이를 수행합니다.

    @Configuration
    @ImportResource("classpath:/baseconfig.xml")
    public static class RulesConfiguration{
        @Resource List<Rule> commonRules;
    
        @Bean
        public List<Rule> normalInvRules(){
            List<Rule> rules = new ArrayList<Rule>();
            rules.addAll(commonRules);
            rules.add(new Rule());
            return rules;
        }
    }
    

    비. 커스텀 factory bean을 사용하여리스트를 확장한다 :

    class ListExpandingFactoryBean<T> implements FactoryBean<List<T>>{
    
        private List<T> baseList;
        private List<T> extendedList;
    
        @Override
        public List<T> getObject() throws Exception {
            List<T> consolidatedList = new ArrayList<T>();
            consolidatedList.addAll(baseList);
            consolidatedList.addAll(extendedList);
            return consolidatedList;
        }
    
        @Override
        public Class<?> getObjectType() {
            return List.class;
        }
    
        @Override
        public boolean isSingleton() {
            return false;
        }
        public void setBaseList(List<T> baseList) {
            this.baseList = baseList;
        }
    
        public List<T> getExtendedList() {
            return extendedList;
        }
    
        public void setExtendedList(List<T> extendedList) {
            this.extendedList = extendedList;
        }
    
    }
    

    이것을 다음과 같이 사용합니다 :

    <bean name="normalInvRules" class="ListExpandingFactoryBean" p:baseList-ref="commonRules">
        <property name="extendedList">
            <list>
                <ref bean="bean4"/>
            </list>
        </property>
    </bean>
    
  3. ==============================

    3.답변 해 주셔서 감사합니다. 이것이 Collection Merging을 사용하여 마침내 해결 한 방법입니다.

    답변 해 주셔서 감사합니다. 이것이 Collection Merging을 사용하여 마침내 해결 한 방법입니다.

    <bean id="rule1" class="com.krovi.rules.Rule1" />
    <bean id="rule2" class="com.krovi.rules.Rule2" />
    <bean id="rule3" class="com.krovi.rules.Rule3" />
    <bean id="rule4" class="com.krovi.rules.Rule4" />
    <bean id="rule5" class="com.krovi.rules.Rule5" />
    
    <bean id="commonList"
        class="org.springframework.beans.factory.config.ListFactoryBean">
        <property name="sourceList">
            <list>
                <ref bean="rule1" />
                <ref bean="rule2" />
                <ref bean="rule3" />
            </list>
        </property>
    </bean>
    <bean id="firstExecutorRules" parent="commonList"
        class="org.springframework.beans.factory.config.ListFactoryBean">
        <property name="sourceList">
            <list merge="true">
                <ref bean="rule4" />
            </list>
        </property>
    </bean>
    <bean id="secondExecutorRules" parent="commonList"
        class="org.springframework.beans.factory.config.ListFactoryBean">
        <property name="sourceList">
            <list merge="true">
                <ref bean="rule5" />
            </list>
        </property>
    </bean>
    
  4. ==============================

    4.공통 규칙을 가진 클래스를 생성하고 다른 규칙으로 자동 와이어 할 수 있습니까? 그게 효과가 없을까요?

    공통 규칙을 가진 클래스를 생성하고 다른 규칙으로 자동 와이어 할 수 있습니까? 그게 효과가 없을까요?

    XML 구성을 사용하여 동일한 접근 방식을 취할 수 있으며 ref 속성을 사용하여 삽입 할 수도 있습니다.

  5. from https://stackoverflow.com/questions/12760436/is-there-a-way-to-re-use-a-utillist-in-spring-configuration-file by cc-by-sa and MIT license