簡單描述之 Spring的IOC配置使用

2021-10-23 12:31:44 字數 4108 閱讀 6438

後續接上篇:新增鏈結描述

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...