spring應用手冊-IOC(XML配置實現)-(26)-注入set集合

q2780004063發表於2020-10-04

戴著假髮的程式設計師 出品

注入set集合

spring應用手冊(第一部分)

我們可以通過set標籤對類中的set屬性進行注入,無論屬性是簡單型別和引用型別。

案例:

準備賬戶類,擁有屬性account,有參和無參構造方法

/**
 * @author 戴著假髮的程式設計師
 *  
 * @description 賬戶
 */
public class Account {
    private String account;
    public Account(){
    }
    public Account(String account) {
        this.account = account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    @Override
    public String toString(){
        return "account:"+account;
    }
}

準備賬戶組類,這個類擁有兩個set集合型別的屬性,一個accName儲存字串型別的賬戶名字,一個儲存Account型別的賬戶物件。 擁有有參和無參構造方法。

/**
 * @author 戴著假髮的程式設計師
 *  
 * @description
 */
public class Group {
    //賬戶名字集合
    private Set<String> accNames;
    //賬戶物件集合
    private Set<Account> accounts;

    public void setAccNames(Set<String> accNames) {
        this.accNames = accNames;
    }
    public void setAccounts(Set<Account> accounts) {
        this.accounts = accounts;
    }
    //無引數構造
    public Group(){
    }
    //有引數構造
    public Group(Set<String> accNames, Set<Account> accounts) {
        this.accNames = accNames;
        this.accounts = accounts;
    }
    public void showNames(){
        for(String name : accNames){
            System.out.print(name+"\t");
        }
        System.out.println();
    }
    public void showAccount(){
        for(Account account : accounts){
            System.out.print(accounts);
        }
        System.out.println();
    }
}

我們在配置檔案中給group注入屬性。使用set標籤進行注入:

<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="byType"  xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 準備三個accountBean -->
    <bean id="account1" class="com.dk.demo2.beans.Account">
        <constructor-arg name="account" value="卡卡西"/>
    </bean>
    <bean id="account2" class="com.dk.demo2.beans.Account">
        <constructor-arg name="account" value="佐助"/>
    </bean>
    <bean id="account3" class="com.dk.demo2.beans.Account">
        <constructor-arg name="account" value="鳴人"/>
    </bean>
    <!-- 註冊一個group -->
    <bean id="group" class="com.dk.demo2.beans.Group">
        <property name="accNames">
            <!-- 使用set標籤注入簡單set集合屬性 -->
            <set>
                <value>路飛</value>
                <value>索隆</value>
                <value>山治</value>
            </set>
        </property>
        <property name="accounts">
            <!-- set標籤注入引用型別屬性 -->
            <set>
                <ref bean="account1"/>
                <ref bean="account2"/>
                <ref bean="account3"/>
            </set>
        </property>
    </bean>
</beans>

測試:

@Test
public void testSet(){
    ApplicationContext ac =
            new ClassPathXmlApplicationContext("applicationContext.xml");
    Group bean = ac.getBean(Group.class);
    bean.showNames();
    bean.showAccount();
}

結果:
在這裡插入圖片描述
當然對應引用型別其實我們也可以在set標籤中利用bean標籤直接例項化物件,例如:

<bean id="group" class="com.boxuewa.dk.demo2.beans.Group">
    <property name="accNames">
        <!-- 使用set標籤注入簡單set集合屬性 -->
        <set>
            <value>路飛</value>
            <value>索隆</value>
            <value>山治</value>
        </set>
    </property>
    <property name="accounts">
        <!-- set標籤注入引用型別屬性 -->
        <set>
            <bean class="com.dk.demo2.beans.Account">
                <constructor-arg name="account" value="喬峰"/>
            </bean>
            <bean class="com.dk.demo2.beans.Account">
                <constructor-arg name="account" value="虛竹"/>
            </bean>
            <bean class="com.dk.demo2.beans.Account">
                <constructor-arg name="account" value="段譽"/>
            </bean>
        </set>
    </property>
</bean>

測試結果:
在這裡插入圖片描述
注意:上面的所有注入方式也都適合構造方法的注入。例如:

<!-- 註冊一個group -->
<bean id="group" class="com.dk.demo2.beans.Group">
    <constructor-arg name="accNames">
        <!-- 使用set標籤注入簡單set集合屬性 -->
        <set>
            <value>路飛</value>
            <value>索隆</value>
            <value>山治</value>
        </set>
    </constructor-arg>
    <constructor-arg name="accounts">
        <!-- set標籤注入引用型別屬性 -->
        <set>
            <bean class="com.dk.demo2.beans.Account">
                <constructor-arg name="account" value="喬峰"/>
            </bean>
            <bean class="com.dk.demo2.beans.Account">
                <constructor-arg name="account" value="虛竹"/>
            </bean>
            <bean class="com.dk.demo2.beans.Account">
                <constructor-arg name="account" value="段譽"/>
            </bean>
        </set>
    </constructor-arg>
</bean>

相關文章