依賴注入的方式(構造函數、set方法、配置文件)

1、構造函數注入:
	/**
	 * 賬戶的業務層實現類
	 */
	public class AccountServiceImpl implements IAccountService {
	    //如果是經常變化的數據,並不適用於注入的方式
	    private String name;
	    private Integer age;
	    private Date birthday;
	    public AccountServiceImpl(String name,Integer age,Date birthday){
	        this.name = name;
	        this.age = age;
	        this.birthday = birthday;
	    }
	    public void  saveAccount(){
	        System.out.println("service中"+name+","+age+","+birthday);
	    }
	}

	<!--構造函數注入:
        使用的標籤:constructor-arg
        標籤出現的位置:bean標籤的內部
        標籤中的屬性
            type:用於指定要注入的數據的數據類型,該數據類型也是構造函數中
            			某個或某些參數的類型
            index:用於指定要注入的數據給構造函數中指定索引位置的參數賦值。
            			索引的位置是從0開始
            name:用於指定給構造函數中指定名稱的參數賦值            常用的
            			===以上三個用於指定給構造函數中哪個參數賦值==========
            value:用於提供基本類型和String類型的數據
            ref:用於指定其他的bean類型數據。它指的就是在spring的Ioc核心容器
            		中出現過的bean對象

        優勢:
            在獲取bean對象時,注入數據是必須的操作,否則對象無法創建成功。
        弊端:
            改變了bean對象的實例化方式,使我們在創建對象時,如果用不到這些數據,
            也必須提供。
    -->
    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
        <constructor-arg name="name" value="泰斯特"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
        <constructor-arg name="birthday" ref="now"></constructor-arg>
    </bean>
    <!-- 配置一個日期對象 -->
    <bean id="now" class="java.util.Date"></bean>
    
2、set方法注入
	public class AccountServiceImpl2 implements IAccountService {

    //如果是經常變化的數據,並不適用於注入的方式
    private String name;
    private Integer age;
    private Date birthday;

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

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

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public void  saveAccount(){
        System.out.println("service中"+name+","+age+","+birthday);
    }
    
     <!-- set方法注入                更常用的方式
        涉及的標籤:property
        出現的位置:bean標籤的內部
        標籤的屬性
            name:用於指定注入時所調用的set方法名稱
            value:用於提供基本類型和String類型的數據
            ref:用於指定其他的bean類型數據。它指的就是在spring的Ioc核
            		心容器中出現過的bean對象
        優勢:
            創建對象時沒有明確的限制,可以直接使用默認構造函數
        弊端:
            如果有某個成員必須有值,則獲取對象是有可能set方法沒有執行。
    -->
    <bean id="accountService2" class="com.itheima.service.impl.AccountServiceImpl2">
        <property name="name" value="TEST" ></property>
        <property name="age" value="21"></property>
        <property name="birthday" ref="now"></property>
    </bean>

3、複雜類型數據注入
		public class AccountServiceImpl3 implements IAccountService {
	    private String[] myStrs;
	    private List<String> myList;
	    private Set<String> mySet;
	    private Map<String,String> myMap;
	    private Properties myProps;
	    public void setMyStrs(String[] myStrs) {
	        this.myStrs = myStrs;
	    }
	    public void setMyList(List<String> myList) {
	        this.myList = myList;
	    }
	    public void setMySet(Set<String> mySet) {
	        this.mySet = mySet;
	    }
	    public void setMyMap(Map<String, String> myMap) {
	        this.myMap = myMap;
	    }
	    public void setMyProps(Properties myProps) {
	        this.myProps = myProps;
	    }
	    public void  saveAccount(){
	        System.out.println(Arrays.toString(myStrs));
	        System.out.println(myList);
	        System.out.println(mySet);
	        System.out.println(myMap);
	        System.out.println(myProps);
	    }
		}

		<!-- 複雜類型的注入/集合類型的注入
        用於給List結構集合注入的標籤:
            list array set
        用於個Map結構集合注入的標籤:
            map  props
        結構相同,標籤可以互換
    -->
    <bean id="accountService3" class="com.itheima.service.impl.AccountServiceImpl3">
        <property name="myStrs">
            <set>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </set>
        </property>

        <property name="myList">
            <array>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </array>
        </property>

        <property name="mySet">
            <list>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </list>
        </property>

        <property name="myMap">
            <props>
                <prop key="testC">ccc</prop>
                <prop key="testD">ddd</prop>
            </props>
        </property>

        <property name="myProps">
            <map>
                <entry key="testA" value="aaa"></entry>
                <entry key="testB">
                    <value>BBB</value>
                </entry>
            </map>
        </property>
    </bean>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章