使用util:list弹出autowire byType

时间:2016-04-30 00:48:39

标签: java spring spring-mvc spring-bean

我正在学习春天(以及春天的行动),因为我正在玩弄了解一些概念;然后我发现了以下行为。

情景:
我想通过使用" byType"在类中自动装配list属性。自动选项。所以我创建了util:list bean;哪个成功注入......所以这里没有惊喜:)。
然后我在同一个类中添加了一个新的列表属性(不同的类层次结构:off-course);然后,在没有做任何额外布线的情况下也会注入....:O

任何机构都可以解释一下在幕后发生的事情。
下面是一些代码snippt。

   public interface Performer {
    public void perform();
}

public interface Instrument {
    public void play();
}


public class Show implements Audotorium {
    Logger logger = Logger.getLogger(Show.class.getName());

    List<Performer> performerList;
    List<Instrument> instruments;

    public void setPerformerList(List<Performer> performerList) {
        this.performerList = performerList;
    }

    public void setInstruments(List<Instrument> instruments) {
        this.instruments = instruments;
    }

    public void show() {
        Iterator<Performer> performerItr = performerList.iterator();
        while (performerItr.hasNext()) {
            performerItr.next().perform();
        }

        Iterator<Instrument> instrumentItr = instruments.iterator();
        while (instrumentItr.hasNext()) {
            instrumentItr.next().play();
        }
    }
}

主班

  public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("/META-INF/spring-context.xml");
        ((Show) context.getBean("show")).show();
    }

Bean Configration:

&#13;
&#13;
    <bean id="juggler" class="com.learning.Juggler"/>
    <bean id="magcian" class="com.learning.Magician"/>
    <bean id="kenny" class="com.learning.Instrumentalist">
        <property name="song" value="bay finger bay finger"/>
        <property name="instrument" ref="saxphone"/>
    </bean>
    <bean id="hunk" class="com.learning.OneManBand" autowire="byType">
        <property name="song" value="bay finger bay finger"/>
        <property name="instruments">
            <list>
                <ref bean="saxphone"/>
                <ref bean="guitar"/>
                <ref bean="harmonica"/>
            </list>
        </property>
    </bean>
    <bean id="totalBeanBags" class="java.lang.Integer" factory-method="valueOf">
        <constructor-arg value="#{performerList.size()}"/>
    </bean>


    <bean id="saxphone" class="com.learning.SaxPhone"/>
    <bean id="guitar" class="com.learning.GenaricInstument">
        <property name="instrumentSound" value="guitar sound"/>
    </bean>
    <bean id="harmonica" class="com.learning.GenaricInstument">
        <property name="instrumentSound" value="harmonica sound"/>
    </bean>


    <util:list id="performerList"/>

    <bean id="show" class="com.learning.Show" autowire="byType">

    </bean>
&#13;
&#13;
&#13;

输出:

JUGGLING 10 BEANBAGS
Showing some crazy magicSSsssSSSsss.....
Playing bay finger bay finger :  TOO TOO TOO
Playing bay finger bay finger :  TOO TOO TOO
guitar sound
harmonica sound
----Now its music time----
 TOO TOO TOO
guitar sound
harmonica sound

1 个答案:

答案 0 :(得分:1)

 <util:list id="performerList"/>

你创建一个空列表,它没有被使用,你可以删除它。

你有一个类型为Performer的'OneManBand'的bean。

当spring尝试自动装配setPerformerList时,它会自动创建类型List<Performer>的列表并将其用作参数。 Spring将类型为Performer的所有bean放入该列表中。

创建Instrument列表并以相同方式注入。

这是spring的一个非常方便的功能,我使用它来构建收集特定类型的所有bean并对其进行操作的注册表。