Spring 注入分類

2021-08-27 14:14:58 字數 3667 閱讀 9036

bean 例項在呼叫無參構造器建立了空值物件後,就要對 bean 物件的屬性進行初始化。

初始化是由容器自動完成的,稱為注入。根據注入方式的不同,常用的有兩類:設值注入、構造注入。還有另外一種,實現特定介面注入。由於這種方式採用侵入式程式設計,汙染了**,所以幾乎不用。

(1)設值注入

設值注入是指,通過 setter 方法傳入被呼叫者的例項。這種注入方式簡單、直觀,因而在 spring 的依賴注入中大量使用。

先定義school的實體物件:

package com.bjpowernode.di01;

public

class

school

@override

public string tostring()

}

定義學生類物件實體:

package com.bjpowernode.di01;

public

class student

public

void

setage(int age)

public

void

setschool(school school)

@override

public string tostring()

}

這裡需要注意兩個地方,乙個是把school封裝以後放在student裡面當作成員物件。第二個是在進行編輯實體物件的時候最好把所有的set/get方法新增上去(對於新手來說)。

配置檔案:

<?xml version="1.0" encoding="utf-8"?>

xmlns=""

xmlns:xsi=""

xsi:schemalocation="

/spring-beans.xsd">

id="myschool"

class="com.bjpowernode.di01.school">

name="name"

value="清華大學"/>

bean>

id="mystudent"

class="com.bjpowernode.di01.student">

name="name"

value="張三"/>

name="age"

value="23"/>

name="school"

ref="myschool"/>

bean>

beans>

當指定 bean 的某屬性值為另一 bean 的例項時,通過 ref 指定它們間的引用關係。ref 的值必須為某bean 的 id 值。對於其它 bean 物件的引用,除了標籤的 ref 屬性外,還可以使用標籤。例如:

< ref bean=」myschool」/>

測試類:

package com.bjpowernode.di01;

import org.junit.test;

public

class

mytest

}

(2)構造注入

構造注入是指,在構造呼叫者例項的同時,完成被呼叫者的例項化。即,使用構造器設定依賴關係。

構造注入標籤中用於指定引數的屬性有:

name:指定引數名稱。

index:指明該引數對應著構造器的第幾個引數,從 0 開始。不過,該屬性不要也行, 但要注意,若引數型別相同,或之間有包含關係,則需要保證賦值順序要與構造器中的引數順序一致。另外,type 屬性可用於指定其型別。基本型別直接寫型別關鍵字即可,非基本型別需要寫全限定性類名。

構造注入和設值注入在配置檔案裡面會有一些不同。

package com.bjpowernode.di02;

public

class

student

@override

public string tostring()

}

配置檔案:

<?xml version="1.0" encoding="utf-8"?>

xmlns=""

xmlns:xsi=""

xsi:schemalocation="

/spring-beans.xsd">

id="myschool"

class="com.bjpowernode.di02.school">

name="name"

value="清華大學"/>

bean>

id="mystudent"

class="com.bjpowernode.di02.student">

name="name"

value="李四"/>

name="age"

value="24"/>

name="school"

ref="myschool"/>

bean>

beans>

注意,上面的index可要可不要。

補充:(在設值注入的基礎上進行的修改:)

對於設值注入與構造注入,在配置檔案中,除了使用或標籤外,還可使用命名空間注入的方式,讓注入的值以標籤屬性的方式出現。根據注入實現方式的不同,分為p 命名空間注入與c 命名空間注入。

p 命名空間注入:採用設值注入方式,故需要有相應的 setter

c 命名空間注入:採用構造注入方式,故需要有相應的構造器

p命名空間注入和c命名空間注入是有點區別的:配置檔案上面的區別

<?xml version="1.0" encoding="utf-8"?>

xmlns=""

xmlns:xsi=""

xmlns:p=""

xsi:schemalocation="

/spring-beans.xsd">

id="myschool"

class="com.bjpowernode.di03.school"

p:name="北京大學"/>

id="mystudent"

class="com.bjpowernode.di03.student"

p:name="王五"

p:age="25"

p:school-ref="myschool"/>

beans>

c命名空間注入:

<?xml version="1.0" encoding="utf-8"?>

xmlns=""

xmlns:xsi=""

xmlns:c=""

xsi:schemalocation="

/spring-beans.xsd">

id="myschool"

class="com.bjpowernode.di04.school">

name="name"

value="清華大學"/>

bean>

id="mystudent"

class="com.bjpowernode.di04.student"

c:name="趙六"

c:age="26"

c:school-ref="myschool"/>

beans>

spring方法注入 Spring方法注入

spring方法注入 spring核心現成可用,有兩個作用域 單例和原型。單例實現單例模式,這意味著在執行時 在jvm中 只有乙個例項。spring在上下文建立期間例項化它們,將它們快取在上下文中,並在需要時 或類似的東西 從快取中提供它們。每次訪問上下文以獲取bean時都會例項化原型。當需要在單例...

spring 依賴注入 Spring依賴注入

依賴注入 dependency injection,簡稱di 與控制反轉 ioc 的含義相同控制反 在使用spring框架之後,物件的例項不再由呼叫者來建立,而是由spring容器來建立,spring容器會負責控制程式之間的關係,而不是由呼叫者的程式 直接控制,這樣控制權由應用程式轉移到了sprin...

sql注入分類

一般是繞過使用者名稱 密碼,具體方法如下 已知原始碼sql語句為 select from table where name name and password passwaord 則可以通過注入 or 1 1 實現繞過 原理 使where後面的條件恆真 型別二 使用union實現注入,例 已知某登入...