Spring中的例項生成方式及其生命週期

2021-09-09 01:43:38 字數 3533 閱讀 2437

三種例項化bean的方式

1.使用類構造器例項化

<

bean

id="userdao1"

class

="com.winner.dao.daoimpl.userdaoimpl"

>

bean

>

使用反射利用類的無參構造器生成例項。

2.使用靜態工廠方法例項化

--配置檔案:

<

bean

id="userdao2"

class

="com.winner.dao.staticdaofactory"

factory-method

="createuserdaoinstance"

>

bean

>

--工廠類:

public

class

staticdaofactory

}

3.使用例項化的工廠物件中的方法例項化,首先要構造出工廠例項,然後在生成例項

--配置檔案:

<

bean

id="******daofactory"

class

="com.winner.dao.******daofactory"

>

bean

>

<

bean

id="userdao3"

factory-bean

="******daofactory"

factory-method

="createuserdaoinstance"

>

bean

>

--工廠類:

public

class

******daofactory

}

我們一般寫**的時候都會分層,顯示層,業務層,資料訪問層,顯示層呼叫業務層,業務層呼叫資料訪問層。

資料訪問層dao只需要乙個例項,業務層service只需要乙個例項,但是action每一次訪問都會生成乙個例項。

bean的作用域

spring ioc容器中定義的bean預設只有乙個例項(單例的),且預設情況下會在容器啟動時初始化bean(餓漢式),但我們可以指定bean節點的lazy-init="true"來延遲初始化bean(懶漢式),這時候,只有第一次獲取bean會才初始化bean。如:

--建立類:

public

class

user

}

--配置檔案:

<

bean

id="user1"

class

="com.winner.spring.user"

/>

或是:

<

bean

id="user1"

class

="com.winner.spring.user"

scope

="singleton"

/>

或是:

<

bean

id="user1"

class

="com.winner.spring.user"

scope

="singleton"

lazy-init

="default"

/>

或是

<

bean

id="user1"

class

="com.winner.spring.user"

scope

="singleton"

lazy-init

="false"

/>

<

bean

id="user1"

class

="com.winner.spring.user"

scope

="singleton"

lazy-init

="true"

/>

當lazy-init取值true時,容器建立不會建立user物件,只有在getbean()時才會建立物件,即延遲載入

對所有bean都應用延遲初始化:

方法是在根節點beans中設定屬性default-lazy-init="true",如下所示:

<

beans

default-lazy-init

="true"

...>

prototype(原型,表示每次獲取的都是新物件)

每次從容器獲取bean都是新的物件。

<

bean

id="user1"

class

="com.winner.spring.user"

scope

="prototype"

/>

getbean()時生成例項。

指定bean的初始化方法和銷毀方法

--建立類:

public

class

userdao

public

void

setdatasource(datasource datasource)

/*** 初始化方法

*/public

void

init()

/*** 銷毀的方法

*/public

void

destroy()

}

--配置:

<

bean

id="userdao"

class

="com.winner.spring.userdao"

init-method

="init"

destroy-method

="destroy"

/>

--測試**:

//

////

在單例時,配置的初始化與銷毀方法都會被呼叫。

//在多例時,只有配置的初始化才會被呼叫。

@test

public

void test() throws

exception

--注意:

---如果scope屬性為prototype則不受spring快取的控制,destory方法也將不會執行(scope調為singleton時才會有效)。

Oracle中主鍵生成方式

專案中若採用oracle資料庫,則主鍵生成可以有兩種方式,一是用sys guid 二是定義乙個sequence,然後用nextval得到id。1 oracle的定義sequence例子 create sequence seq test minvalue 10000 maxvalue 99999999...

hibernate中主鍵生成方式

color darkblue color 1 color green assigned color 主鍵由應用邏輯產生,資料交由hibernate儲存時,主鍵值已經設定完畢,無需hibernate干預。在主鍵要特殊設定,有特殊意義的情況下使用,hibernate不會自動生成了,否則會生成後替換到自己...

長短token生成方式及作用

token的返回 使用者登陸後,後台會返回給使用者兩個token,1是長token,2是短token 有效期 長token有效期為乙個月,短token有效期為1小時 訪問與再次獲取 如果長token不存在,則使用者需要重新登入獲取長短token。後台設計 我們在生成長短token的時候將在redis...