1. 程式人生 > >spring依賴注入DI

spring依賴注入DI

關於Bean的三種裝配方式請檢視:https://blog.csdn.net/qq_41357573/article/details/84382815

依賴注入

依賴注入的本質就是裝配,裝配是依賴注入的具體行為

簡介

在應用中,按照傳統的做法,每個物件負責管理與自己相互協調的物件(即所依賴的物件)的引用,這將會導致高度耦合和難以測試的程式碼 通過DI,物件的依賴關係由系統中負責協調各部件的第三方元件在建立物件的時候進行設定,物件無需自己建立和管理他們的依賴關係,依賴關係將被自動注入到他們所需要的物件當中去

Setter方法注入

例如1:

public class Person{
    private String name;
    private int age;
   public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

上面是一個純粹的POJO類


spring.xml

<!-- 裝配Pserson-->
<bean id="person" class="com.test.spring.Person">
    <property name="name" value="yq"/>
    <property name="age" value="23"/>
</bean>
這樣Bean Person類就被spring管理了起來 還有一種複雜的情況:如果Person類包含了一個Type物件屬性,配置就比較繁瑣
例2: Pserson類
public class Person
{ private String name; private int age; private Type type; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setType(Type type) { this.type = type; } }

Type類:

public class Type{
    private String typeName;
    public void setTypeName(String typeName){
        this.typeName = typeName;
    }
}
  • 有兩種配置方法
    第一種:內建Bean的方式
<bean class="com.test.spring.Person">
    <property name="name" value="yq"/>
    <property name="age" value="23"/>
    <property name="type">
        <bean class="com.test.spring.Type">
            <property name="typeName" value="Coding"/>
        </bean>
    </property>

第二種:採用屬性的方法

<bean class="com.test.spring.Type">
    <property name="typeName" value="Coding"/>
</bean>
<bean class="com.test.spring.Pserson">
    <property name="name" value="yq"/>
    <property name="age" value="23"/>
    <property name="type" ref="type"/>
</bean>

構造器注入

* 這種方式的注入是帶有引數的建構函式注入
例如:Person類
public class Person {
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
}

Spring.xml中配置

  • 將字面量注入到構造器中
<!--第一步進行Bean的xml顯示裝配-->
<bean id="pserson" class="com.test.spring.Person">
    <constructor-arg name="name" value="yq"/>
    <constructor-arg name="age" value="23"/>
</bean>

這是簡單的構造器注入,在配置時,name屬性可以不寫,如果不寫會按照預設的屬性注入
也可以根據型別注入,如下:不寫name,用type進行區分

<constructor-org type="int" value="23"/>

註解注入

檢視另一篇文章:
https://blog.csdn.net/qq_41357573/article/details/84445374