Spring框架詳解 1

2021-08-10 10:37:29 字數 3480 閱讀 7111

開發所需工具ioc

spring的控制反**把物件的建立、初始化、銷毀等工作交給spring容器來做。 由 spring容器控制物件的生命週期。

ioc : inverse of control(控制反轉)

1. 把自己 new 的東西改為由容器提供

a)初始化具體值

b)裝配

2. 好處:靈活裝配

無參建構函式

public

class helloworld

public

void

sayhello()

}

id="helloworld"

class="com.lanou.domain.helloworld">

bean>

//測試類

@test

public

void

testhelloworld()

/**

* 靜態工廠

* 在spring內部,呼叫了hellowworldfactory內部的getinstance內部方法

* 而該方法的內容就是建立物件的過程.是由程式設計師來完成的

*/@test

public

void

testhellowworldfactory()

public

class helloworldfactory2

}

id="helloworld2"

class="com.lanou.swan.action.helloworldfactory2"/>

factory-bean="helloworld2"

factory-method="getinstance"/>

/**

* 例項工廠

* 1. spring 容器建立了乙個例項工廠的 bean

* 2. 該bean呼叫了工廠方法的 getinstance 方法產生物件

*/@test

public

void

test2()

簡單說就是物件在spring容器(ioc容器)中的生命週期,也可以理解為物件在spring容器中的建立方式。 目前,scope的取值有5種取值:
singleton(預設)

每個spring ioc 容器中乙個bean定義只有乙個物件例項(共享).

此取值時表明容器中建立時只存在乙個例項,所有引用此bean都是單一例項。此外, singleton型別的bean定義從容器啟動到第一次被請求而例項化開始,只要容器不銷毀 或退出,該型別的bean的單一例項就會一直存活,典型單例模式,如同servlet在web 容器中的生命週期。

prototype

允許bean可以被多次例項化(使用一次就建立乙個例項) . spring不能對乙個prototype bean的整個生命週期負責. 無論lazy-init 的值是什麼, 都在 context.getbean時才建立對 象.

spring容器在進行輸出prototype的bean物件時,會每次都重新生成乙個新的物件給請 求方,雖然這種型別的物件的例項化以及屬性設定等工作都是由容器負責的,但是只 要準備完畢,並且物件例項返回給請求方之後,容器就不在擁有當前物件的引用,請 求方需要自己負責當前物件後繼生命週期的管理工作,包括該物件的銷毀。也就是 說,容器每次返回請求方該物件的乙個新的例項之後,就由這個物件「自生自滅」,最典 型的體現就是spring與struts2進行整合時,要把action的scope改為prototype。

requestsession

session作用域表示該針對每一次http請求都會產生乙個新的bean,同時該bean僅在 當前http session內有效。

global session

id="per1"

class="com.lanou.domain.person"/>

id="per2"

class="com.lanou.domain.person"

lazy-init="true"/>

@test

public

void

testperson_lazy_init_true()

如果想對所有bean都應用延遲初始化,可以在根節點beans設定default-lazy- init=「true「,如下:

"true"

...>

spring初始化bean或銷毀bean時,有時需要作一些處理工作,因此spring可以在建立和 拆卸bean的時候呼叫bean的兩個生命週期方法。
public

class person

public

void

destroy()

}

"per1"

class="com.lanou.domain.person" init-method="init" destroy-method="destroy"/>

當 per1 被載入到spring容器中時呼叫init-method方法。當 per1 從容器中刪除時呼叫 destroy-method(scope = singleton有效)

/**

*在構造方法之後立即執行 init 方法,

*如果 spring 執行 close 方法,關閉之後執行 destroy

*/@test

public

void

testperson_init_destroy() {

person person = (person)context.getbean("per1");

//spring 容器關閉

id="car"

name="bmcar"

class="com.lanou.domain.car"/>

name="car"

alias="qq"/>

car car1 = (car) context.getbean("car");

car car2 = (car) context.getbean("qq");

//都是同乙個物件

system.out

.println(car1);

system.out

.println(car2);

Spring 框架 詳解 (二)

的開發包 spring framework 3.2.0.release dist.zip spring開發包 docs spring框架 api和規範 libs spring開發的 jar包 schema xml的約束文件 spring framework 3.0.2.release depende...

Spring框架的註解詳解

註解 說明 component 建立該類的bean物件,然後存入ioc容器中 repository 建立持久層類的bean物件,然後存入ioc容器中 service 建立業務層類的bean物件,然後存入ioc容器中 controller 建立表現層類bean物件,然後存入ioc容器中 autowir...

spring框架詳解 五 AOP註解形式

前面講了aop的xml形式,這裡說明下其註解形式,我們在啟動tomcat伺服器的時候,大家都會發現從這裡面可以看到記載的紅色日誌資訊如下圖,那麼我們如何自己定義日誌呢,直接從案例中說明.定義乙個記載加減乘除的日誌狀態 準備工作 1.新建乙個xml檔案拿來包掃瞄,自動注入 通過aop命名空間的宣告自動...