2016-04-30 10 views
1

私は春を学んでいます。その後、私は行動に従って観察した。spring autowire byType with util:リスト

シナリオ:
私は「byType」autowireオプションを使用して、クラス内のリストプロパティをautowireしたかったです。だから私はutil:list beanを作った。それは注射に成功しました。だからここには驚きはありません:)。
次に、同じクラス(異なるクラス階層のオフコース)に新しいリストプロパティを追加しました。余分な配線をせずに注入することもできます.... O

ボデーの中で何が起こっているのか説明できますか?
以下はコードスニペットです。

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 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>

出力:

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

<util:list id="performerList"/> 

であなたは空のリストを作成するには、あなたがそれを削除することができ、使用されていません。

「OneManBand」のタイプPerformerのBeanが1つあります。

スプリングがsetPerformerListをオートワイヤードしようとすると、タイプList<Performer>のリストが自動的に作成され、パラメータとして使用されます。 Springは、タイプPerformerのすべてのBeanをそのリストに入れます。

Instrumentのリストが作成され、同じ方法で注入されます。

これは春の非常に便利な機能です。私はそれを使用して、特定のタイプのすべてのBeanを収集し、それらに作用するレジストリを構築します。

+0

答えをいただきありがとうございます。 – majid

関連する問題