1. 程式人生 > 實用技巧 >5、DL依賴注入

5、DL依賴注入

DL

  • 依賴注入:Dependency Injection。它是 spring 框架核心 ioc 的具體實現。
  • 為什麼需要DL?
    • 我們的程式在編寫時,通過控制反轉,把物件的建立交給了 spring,但是程式碼中不可能出現沒有依賴的情況。
    • ioc 解耦只是降低他們的依賴關係,但不會消除。例如:我們的業務層仍會呼叫持久層的方法。
    • 那這種業務層和持久層的依賴關係,在使用 spring 之後,就讓 spring 來維護了。
    • 簡單的說,就是坐等框架把持久層物件傳入業務層,而不用我們自己去獲取。

1、建構函式注入(必須為所有引數賦值):

  詳情請參考我的上一篇部落格:IOC建立物件的方式(基於建構函式的依賴注入)

2、set方法注入(不需要為所有成員賦值):

  只使用setter方法

pojo實體類:

/**
 * @author zhangzhixi
 */
public class Student {
    private String id;
    private String name;
    private List<String> hobbies;
    private Map<String,String> location;

    public String getId() {
        return id;
    }

    public
void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<String> getHobbies() { return hobbies; } public void setHobbies(List<String> hobbies) {
this.hobbies = hobbies; } public Map<String, String> getLocation() { return location; } public void setLocation(Map<String, String> location) { this.location = location; } @Override public String toString() { return "Student{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", hobbies=" + hobbies + ", location=" + location + '}'; } }

bens.xml:

    <bean id="student" class="com.zhixi.pojo.Student">
        <property name="id" value="2018021506"/>
        <property name="name" value="張志喜"/>
    </bean>

測試類:

public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bens.xml");
        Student student = (Student) context.getBean("student");
        System.out.println(student.getId()); // 2018021506
        System.out.println(student.getName()); // 張志喜
    }
}

2.1、注入List跟Map集合

bens.xml:

    <bean id="student" class="com.zhixi.pojo.Student">
        <property name="hobbies">
            <list>
                <value>抽菸</value>
                <value>喝酒</value>
                <value>燙頭</value>
            </list>
        </property>
        <property name="location">
            <map>
                <entry key="464300" value="息縣"/>
                <entry key="464000" value="信陽"/>
                <entry key="450000" value="鄭州"/>
            </map>
        </property>
    </bean>

測試類:

public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bens.xml");
        Student student = (Student) context.getBean("student");

        List<String> hobbies = student.getHobbies();
        for (String hobby : hobbies) {
            System.out.println(hobby);
        }

        Map<String, String> location = student.getLocation();
        System.out.println(location.get("464300"));
    }
}

輸出結果:

抽菸
喝酒
燙頭
息縣