Spring Bean--自動裝配

自動裝配:實現bean的注入或者裝配
bean的自動裝配的類型(默認類型爲No):
這裏寫圖片描述
在同一個IOC容器中,id即屬性名是唯一的。


例:
spring-autowiring.xml設置default-autowire:

<?xml version="1.0" encoding="UTF-8"?>
<beans 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" 
        default-autowire="constructor"> 
        <!-- 也可設置爲byName,使用byName時,不可忽略AutoWiringDAO的id的配置 ;
            byType的自動注入和bean的id沒有直接關係,當使用byType時,可省略此文件中AutoWiringDAO的id的配置 ;
            設置爲"constructor"時,必須增加構造方法
            -->

      <bean id="autoWiringService" class="com.autowiring.AutoWiringService"></bean>

      <bean id="autoWiringDAO" class="com.autowiring.AutoWiringDAO"></bean>
 </beans>

AutoWiringDAO:

package com.autowiring;

public class AutoWiringDAO {    
    public void say(String word){
        System.out.println("AutoWiringDAO:"+word);
    }
}

AutoWiringService:

package com.autowiring;

public class AutoWiringService {

    private AutoWiringDAO autoWiringDAO;

    //設置 default-autowire="constructor"要增加構造方法,只有構造器注入才寫構造方法,其他方式可不寫
    //根據構造器注入是在IOC容器中查找構造器方法傳入參數的類型是否在IOC容器存在相應類型的bean的實例,若查找類型class,則與id無關,可在bean的配置中刪除id
    public AutoWiringService(AutoWiringDAO autoWiringDAO){
        System.out.println("AutoWiringService");
        this.autoWiringDAO=autoWiringDAO;       
    }

    //在spring-autowiring.xml中設置了default-autowire="byName",
    //會在Spring的IOC容器中尋找名稱爲autoWiringDAO的bean的id,會將其對應的實例賦值給AutoWiringService聲明的autoWiringDAO對象
    public void setAutoWiringDAO(AutoWiringDAO autoWiringDAO) {
        this.autoWiringDAO = autoWiringDAO;
    }

    public void say(String word){
        this.autoWiringDAO.say(word);
    }
}

測試TestAutoWiring:

package com.test.autowiring;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import com.autowiring.AutoWiringService;
import com.imooc.test.base.UnitTestBase;

@RunWith(BlockJUnit4ClassRunner.class)
public class TestAutoWiring extends UnitTestBase {

    public TestAutoWiring() {
        super("classpath:spring-autowiring.xml");
    }

    @Test
    public void testSay(){
        AutoWiringService service=super.getBean("autoWiringService");
        service.say("this is a test");
    }

}

運行:
這裏寫圖片描述
注:

  1. 使用構造器注入必須寫構造函數,其他方式可不寫。
  2. 根據屬性名裝配必須設置id
  3. 根據類型裝配,必須設置class,可不設置id
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章