Spring參數注入的幾種方法

對代碼不滿足,是任何真正有天才的程序員的根本特徵。
1. 基本類型值
2. 注入bean;
3. 內部bean; 在property內部加個bean
4. Null值
5. 級聯屬性
6. 集合類型屬性

基本類型值注入:在bean中加入property 通過value直接賦值
  <bean id="people1" class="com.java1234.entity.People">
        <property name="id" value="1"></property>
        <property name="name" value="張三"></property>
        <property name="age" value="11"></property>
    </bean>

但是你的實體類People中必須有這些屬性名 id,name,age;並且有set方法

注入Bean類型:在bean中加入將一個類作爲屬性 通過property的ref依賴另一個bean(前提這個bean是有值的),並且在類中也要申明這個類屬性屬性和他的set方法,一般set的方法是通過xml自動注入的

 <bean id="people2" class="com.java1234.entity.People">
        <property name="id" value="2"></property>
        <property name="name" value="張三"></property>
        <property name="age" value="11"></property>
        <property name="dog" ref="dog"></property>
    </bean>
    <bean id="dog" class="com.java1234.entity.Dog">
        <property name="name" value="jack"></property>
    </bean>

    public class People {
    private int id;
    private String name;
    private int age;
    private Dog dog;
    public void setDog(Dog dog) {
        this.dog = dog;
    }
    }
package com.java1234.entity;

public class Dog {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

內部bean:在你的bean中property中加入一個bean類似內部類 跟外部申明一樣class都要申明清楚

    <bean id="people3" class="com.java1234.entity.People">
        <property name="id" value="3"></property>
        <property name="name" value="張三"></property>
        <property name="age" value="11"></property>
        <property name="dog">
           <bean class="com.java1234.entity.Dog">
                 <property name="name" value="Tom"></property>
          </bean>
        </property>
    </bean>

Null值:僅限申明null值 同內部bean一樣 在property內部用null標籤

   <bean id="people4" class="com.java1234.entity.People">
    <property name="id" value="4"></property>
    <property name="name" value="張三"></property>
    <property name="age" value="11"></property>
    <property name="dog">
        <null></null>
    </property>
  </bean>

級聯屬性:在property name的輸入中類似對象成員域的調用dog.name

     <bean id="people5" class="com.java1234.entity.People">
        <property name="id" value="1"></property>
        <property name="name" value="張三"></property>
        <property name="age" value="11"></property>
        <property name="dog.name" value="Jack2"></property>
    </bean> 
</beans>

*這裏有3個需要注意的地方:1.在people類中的dog屬性需要實例化new Dog();
2.同時在people類中要有dog的get方法 否則會報錯*
3.在輸出dog名字時候 要dog.getName;
配置文件中配置bean的屬性時,property標籤不僅能直接配置該bean對應的類自身的屬性,而且還可以直接配置該類的屬性對象向的屬性,即級聯屬性。這裏的級聯屬性被賦值的前提是級聯屬性所屬的對象屬性已經被屬性注入或構造器注入賦值,因爲一般沒有注入,所以要new出空對象,讓xml注入屬性對象的屬性,否則會報異常。

<bean id="people5" class="com.java1234.entity.People">
<property name="id" value="1"></property>
<property name="name" value="張三"></property>
<property name="age" value="11"></property>
<property name="dog.name" value="Jack2"></property>
</bean>
    package com.java1234.entity;

public class People {
    private int id;
    private String name;
    private int age;
    private Dog dog=new Dog();//級聯屬性需要實例化dog

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public Dog getDog() {
        return dog;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "People [id=" + id + ", name=" + name + ", age=" + age
                + ", dog=" + dog.getName()+ "]";
    }

}

集合類型屬性:property中加入list set props等子標籤以 value子標籤賦值 分別對應People類中ArrayList HashSet Properties等類型屬性 還有HashMap對應map.entry.key(value子標籤賦值)和map.entry.value鍵值對

 <property name="hobbies">
            <list>
                <value>唱歌</value>
                <value>跳舞</value>
            </list>
        </property>
        <property name="loves">
            <set>
                <value>唱歌2</value>
                <value>跳舞2</value>
            </set>
        </property>
        <property name="works">
            <map>
                <entry>
                    <key><value>上午</value></key>
                    <value>寫代碼</value>
                </entry>
                <entry>
                    <key><value>下午</value></key>
                    <value>測試代碼</value>
                </entry>
            </map>
        </property>
        <property name="addresses">
            <props>
                <prop key="address1">aaaaa</prop>
                <prop key="address2">bbbbb</prop>
            </props>
        </property>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章