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實現注入,例 已知某登入...