後續接上篇:新增鏈結描述
1.將bean裝配到spring容器中,進行xml配置。
<?xml version="1.0" encoding="utf-8"?>
xmlns
=""xmlns:xsi
=""xsi:schemalocation
=" /spring-beans.xsd
">
"student"
class
="org.example.bean.student"
>
bean
>
"teacher"
class
="org.example.bean.teacher"
>
bean
>
beans
>
bean元素之中的屬性(常用):
id:是乙個 bean 的唯一識別符號,spring 容器對 bean 的配置和管理都通過該屬性完成。
name:spring 容器同樣可以通過此屬性對容器中的 bean 進行配置和管理,name 屬性中可以為 bean 指定多個名稱,每個名稱之間用逗號或分號隔開。
class:該屬性指定了 bean 的具體實現類,它必須是乙個完整的類名,使用類的全限定名。
scope:用於設定 bean 例項的作用域,其屬性值有 singleton(單例)、prototype(原型)。其預設值是 singleton。
init-method:用於初始化 bean 例項物件,在例項完之後呼叫。
destory-method:用於銷毀 bean 例項物件,在容器銷毀時呼叫。
constructor-arg :元素的子元素,可以使用此元素傳入構造引數進行例項化。該元素的 index 屬性指定構造引數的序號(從 0 開始),type 屬性指定構造引數的型別。
property:bean元素的子元素,用於呼叫 bean 例項中的 set 方法完成屬性賦值,從而完成依賴注入。該元素的 name 屬性指定 bean 例項中的相應屬性名。
ref:property和 constructor-arg等元素的子元索,該元素中的 bean 屬性用於指定對 bean 工廠中某個 bean 例項的引用。
value:property 和 constractor-arg 等元素的子元素,用於直接指定乙個常量值。
list:用於封裝 list 或陣列型別的依賴注入。
set:用於封裝 set 型別屬性的依賴注入。
map:用於封裝 map 型別屬性的依賴注入。
entry: map元素的子元素,用於設定乙個鍵值對。其 key 屬性指定字串型別的鍵值,ref 或 value 子元素指定其值。
2.bean三種例項化:(!!!此處省略實體類,xml中spring配置頭!!!)
構造器例項化:
配置和呼叫:
"student"
class
="org.example.bean.student"
/>
new(
"instance.xml");
getbean
("student"
, student.
class
);
靜態方法例項化:
"teacher"
class
="org.example.factory_static.teache***ctory"
factory-method=
"create"
/>
new(
"instance.xml");
getbean
("student"
, student.
class
);
例項工廠工廠化:
"manage***ctory"
class
="org.example.factory_instance.manage***ctory"
/>
<
!-- factory-bean屬性指定乙個例項工廠,factory-method屬性確定使用工廠中的哪個方法 --
>
"manager" factory-bean=
"manage***ctory" factory-method=
"create"
/>
new(
"instance.xml");
getbean
("student"
, student.
class
);
bean的作用範圍:
singleton單例
prototype原型
request http請求
session :在一次 http session 中,容器會返回該 bean 的同乙個例項。而對不同的 http 請求,會返回不同的例項,該作用域僅在當前 http session 內有效。
global session
基於annotation:
@component
可以使用此註解描述 spring 中的 bean,但它是乙個泛化的概念,僅僅表示乙個元件(bean),並且可以作用在任何層次。使用時只需將該註解標註在相應類上即可。
@autowired
用於對 bean 的屬性變數、屬性的 set 方法及建構函式進行標註,配合對應的註解處理器完成 bean 的自動配置工作。預設按照 bean 的型別進行裝配。
@resource
其作用與 autowired 一樣。其區別在於 @autowired 預設按照 bean 型別裝配,而 @resource 預設按照 bean 例項名稱進行裝配。
@resource 中有兩個重要屬性:name 和 type。spring 將 name 屬性解析為 bean 例項名稱,type 屬性解析為 bean 例項型別。
如果指定 name 屬性,則按例項名稱進行裝配;如果指定 type 屬性,則按 bean 型別進行裝配。
如果都不指定,則先按 bean 例項名稱裝配,如果不能匹配,則再按照 bean 型別進行裝配;如果都無法匹配,則丟擲 nosuchbeandefinitionexception 異常。
@qualifier
與 @autowired 註解配合使用,會將預設的按 bean 型別裝配修改為按 bean 的例項名稱裝配,bean 的例項名稱由 @qualifier 註解的引數指定。
@controller
通常作用在控制層(controller 層),用於將控制層的類標識為 spring 中的 bean,其功能與 @component 相同。
@service
通常作用在業務層(service 層),用於將業務層的類標識為 spring 中的 bean,其功能與 @component 相同。
@repository
用於將資料訪問層(dao層)的類標識為 spring 中的 bean,其功能與 @component 相同。
自動裝配:
要使用自動裝配,就需要配置 元素的 autowire 屬性。autowire 屬性有五個值。
"userservice"
class
="org.example.wire_annotation.userservice"
autowire=
"byname"
/>
byname:
根據 property 的 name 自動裝配,如果乙個 bean 的 name 和另乙個 bean 中的 property 的 name 相同,則自動裝配這個 bean 到 property 中。
bytype :
根據 property 的資料型別(type)自動裝配,如果乙個 bean 的資料型別相容另乙個 bean 中 property 的資料型別,則自動裝配。
constructor :
根據構造方法的引數的資料型別,進行 bytype 模式的自動裝配。
autodetect:
如果發現預設的構造方法,則用 constructor 模式,否則用 bytype 模式。
no:預設情況下,不使用自動裝配,bean 依賴必須通過 ref 元素定義。
簡單描述Spring的 Ioc和Aop
在a類中呼叫b類的方法,那麼我們就稱 a依賴b,b為被依賴 物件 傳統做法 1 直接在a中new出b類物件,然後呼叫b類方法 2 通過簡單工廠獲取b類物件,然後呼叫b類的方法 擺脫了與b的耦合,卻又與工廠產生了耦合 以上兩種做法,都是在a中主動去new或呼叫簡單工廠的方法產生b的物件,注意,關鍵字是...
spring學習之IOC的學習
2 xml中幾種注入方式 首先建立三個包,再建立3個類 這裡寫描述 userdao中 public class userdao userservice中 public class userservice public void insertuser public userdao getuserdao...
Spring之IOC容器的實現
控制反 依賴物件的獲得被反轉了,即依賴注入。beandefinition用來管理基於spring的應用中的各種物件以及它們之間的相互依賴關係。抽象了我們對bean的定義,是讓容器起作用的主要資料模型。依賴反轉功能都是圍繞對beandefinition的處理來完成的。程式設計式使用ioc容器的過程 c...