欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Spring中Bean作用域和生命周期的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹Spring中Bean作用域和生命周期的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

站在用戶的角度思考問題,與客戶深入溝通,找到井岡山網(wǎng)站設(shè)計與井岡山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋井岡山地區(qū)。

作用域的種類

Spring 容器在初始化一個 Bean 的實例時,同時會指定該實例的作用域。Spring3 為 Bean 定義了五種作用域,具體如下。

1)singleton

單例模式,使用 singleton 定義的 Bean 在 Spring 容器中只有一個實例,這也是 Bean 默認的作用域。

2)prototype

原型模式,每次通過 Spring 容器獲取 prototype 定義的 Bean 時,容器都將創(chuàng)建一個新的 Bean 實例。

3)request

在一次 HTTP 請求中,容器會返回該 Bean 的同一個實例。而對不同的 HTTP 請求,會返回不同的實例,該作用域僅在當(dāng)前 HTTP Request 內(nèi)有效。

4)session

在一次 HTTP Session 中,容器會返回該 Bean 的同一個實例。而對不同的 HTTP 請求,會返回不同的實例,該作用域僅在當(dāng)前 HTTP Session 內(nèi)有效。

5)global Session

在一個全局的 HTTP Session 中,容器會返回該 Bean 的同一個實例。該作用域僅在使用 portlet context 時有效。

在上述五種作用域中,singleton 和 prototype 是最常用的兩種,接下來將對這兩種作用域進行詳細講解。

singleton 作用域

singleton 是 Spring 容器默認的作用域,當(dāng)一個 Bean 的作用域為 singleton 時,Spring 容器中只會存在一個共享的 Bean 實例,并且所有對 Bean 的請求,只要 id 與該 Bean 定義相匹配,就只會返回 Bean 的同一個實例。

通常情況下,這種單例模式對于無會話狀態(tài)的 Bean(如 DAO 層、Service 層)來說,是最理想的選擇。

在 Spring 配置文件中,可以使用 <bean> 元素的 scope 屬性,將 Bean 的作用域定義成 singleton,其配置方式如下所示:

<bean id="person" class="com.mengma.scope.Person" scope="singleton"/>

在項目的 src 目錄下創(chuàng)建一個名為 com.mengma.scope 的包,在該包下創(chuàng)建 Person 類,類中不需要添加任何成員,然后創(chuàng)建 Spring 的配置文件 applicationContext.xml,將上述 Bean 的定義方式寫入配置文件中,最后創(chuàng)建一個名為 PersonTest 的測試類,編輯后如下所示。

package com.mengma.scope;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class PersonTest {
@Test
public void test() {
// 定義Spring配置文件路徑
String xmlPath = "com/mengma/scope/applicationContext.xml";
// 初始化Spring容器,加載配置文件,并對bean進行實例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
xmlPath);
// 輸出獲得實例
System.out.println(applicationContext.getBean("person"));
System.out.println(applicationContext.getBean("person"));
}
}

使用 JUnit 測試運行 test() 方法,運行成功后,控制臺的輸出結(jié)果如圖 1 所示。

Spring中Bean作用域和生命周期的示例分析

圖 1 輸出結(jié)果

從圖 1 中可以看到,兩次輸出的結(jié)果相同,這說明 Spring 容器只創(chuàng)建了一個 Person 類的實例。由于 Spring 容器默認作用域是 singleton,如果不設(shè)置 scope="singleton",則其輸出結(jié)果也將是一個實例。

prototype 作用域

使用 prototype 作用域的 Bean 會在每次請求該 Bean 時都會創(chuàng)建一個新的 Bean 實例。因此對需要保持會話狀態(tài)的 Bean(如 Struts2 的 Action 類)應(yīng)該使用 prototype 作用域。

在 Spring 配置文件中,要將 Bean 定義為 prototype 作用域,只需將 <bean> 元素的 scope 屬性值定義成 prototype,其示例代碼如下所示:

<bean id="person" class="com.mengma.scope.Person" scope="prototype"/>

將《singleton作用域》部分中的配置文件更改成上述代碼形式后,再次運行 test() 方法,控制臺的輸出結(jié)果如圖 2 所示。

Spring中Bean作用域和生命周期的示例分析

圖 2 輸出結(jié)果

從圖 2 的輸出結(jié)果中可以看到,兩次輸出的結(jié)果并不相同,這說明在 prototype 作用域下,Spring 容器創(chuàng)建了兩個不同的 Person 實例。

生命周期

而對于 prototype 作用域的 Bean,Spring 只負責(zé)創(chuàng)建,當(dāng)容器創(chuàng)建了 Bean 的實例后,Bean 的實例就交給客戶端代碼管理,Spring 容器將不再跟蹤其生命周期。每次客戶端請求 prototype 作用域的 Bean 時,Spring 容器都會創(chuàng)建一個新的實例,并且不會管那些被配置成 prototype 作用域的 Bean 的生命周期。

了解 Spring 生命周期的意義就在于,可以利用 Bean 在其存活期間的指定時刻完成一些相關(guān)操作。這種時刻可能有很多,但一般情況下,會在 Bean 被初始化后和被銷毀前執(zhí)行一些相關(guān)操作。

在 Spring 中,Bean 的生命周期是一個很復(fù)雜的執(zhí)行過程,我們可以利用 Spring 提供的方法定制 Bean 的創(chuàng)建過程。

當(dāng)一個 Bean 被加載到 Spring 容器時,它就具有了生命,而 Spring 容器在保證一個 Bean 能夠使用之前,會進行很多工作。Spring 容器中 Bean 的生命周期流程如圖3所示。

Spring中Bean作用域和生命周期的示例分析

圖3Bean 的生命周期

Bean 生命周期的整個執(zhí)行過程描述如下。

1)根據(jù)配置情況調(diào)用 Bean 構(gòu)造方法或工廠方法實例化 Bean。

2)利用依賴注入完成 Bean 中所有屬性值的配置注入。

3)如果 Bean 實現(xiàn)了 BeanNameAware 接口,則 Spring 調(diào)用 Bean 的 setBeanName() 方法傳入當(dāng)前 Bean 的 id 值。

4)如果 Bean 實現(xiàn)了 BeanFactoryAware 接口,則 Spring 調(diào)用 setBeanFactory() 方法傳入當(dāng)前工廠實例的引用。

5)如果 Bean 實現(xiàn)了 ApplicationContextAware 接口,則 Spring 調(diào)用 setApplicationContext() 方法傳入當(dāng)前 ApplicationContext 實例的引用。

6)如果 BeanPostProcessor 和 Bean 關(guān)聯(lián),則 Spring 將調(diào)用該接口的預(yù)初始化方法 postProcessBeforeInitialzation() 對 Bean 進行加工操作,此處非常重要,Spring 的 AOP 就是利用它實現(xiàn)的。

7)如果 Bean 實現(xiàn)了 InitializingBean 接口,則 Spring 將調(diào)用 afterPropertiesSet() 方法。

8)如果在配置文件中通過 init-method 屬性指定了初始化方法,則調(diào)用該初始化方法。

9)如果 BeanPostProcessor 和 Bean 關(guān)聯(lián),則 Spring 將調(diào)用該接口的初始化方法 postProcessAfterInitialization()。此時,Bean 已經(jīng)可以被應(yīng)用系統(tǒng)使用了。

10)如果在 <bean> 中指定了該 Bean 的作用范圍為 scope="singleton",則將該 Bean 放入 Spring IoC 的緩存池中,將觸發(fā) Spring 對該 Bean 的生命周期管理;如果在 <bean> 中指定了該 Bean 的作用范圍為 scope="prototype",則將該 Bean 交給調(diào)用者,調(diào)用者管理該 Bean 的生命周期,Spring 不再管理該 Bean。

11)如果 Bean 實現(xiàn)了 DisposableBean 接口,則 Spring 會調(diào)用 destory() 方法將 Spring 中的 Bean 銷毀;如果在配置文件中通過 destory-method 屬性指定了 Bean 的銷毀方法,則 Spring 將調(diào)用該方法對 Bean 進行銷毀。

Spring 為 Bean 提供了細致全面的生命周期過程,通過實現(xiàn)特定的接口或 <bean> 的屬性設(shè)置,都可以對 Bean 的生命周期過程產(chǎn)生影響。雖然可以隨意配置 <bean> 的屬性,但是建議不要過多地使用 Bean 實現(xiàn)接口,因為這樣會導(dǎo)致代碼和 Spring 的聚合過于緊密。

以上是“Spring中Bean作用域和生命周期的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:Spring中Bean作用域和生命周期的示例分析-創(chuàng)新互聯(lián)
當(dāng)前URL:http://aaarwkj.com/article16/dppddg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站導(dǎo)航、外貿(mào)建站、全網(wǎng)營銷推廣、網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)
未满18禁止观看在线| 2020年最新国产三级网站| 国产亚洲一区二区视频| 国产视频成人免费观看| 色婷婷av一区二区三| 日本一道二区三区我不卡| 中文字幕二区三区av| 夜夜爽精品国产亚洲av成人| 国产高清学生三级一区二区| 亚洲不卡免费在线视频| 刘亦菲毛片一区二区三区| 99久久婷婷免费国产综合精品| 99热这里在线只有精品| 欧美黄片视频在线免费看| 亚洲av成人精品网站推荐| 亚洲最大av免费在线看| 色婷婷综合激情一区二区| 麻豆乱淫一区二区三爱免费| 果冻国产精品麻豆成人av| 囗交囗爆吞精在线视频| 亚洲黄色片在线播放| 亚洲青涩精品一区二区三区| 少妇的诱惑免费在线看| 懂色av中文一区二区| 亚洲国产精品一区二区三区在线 | 国产亚洲中文久久网久久| 成年网站在线91九色| 亚洲香蕉一级视频在线播放| 91日韩中文字幕在线观看| 国产三级三级三级三级三级 | 亚洲精品成人久久网| 韩国av高清在线观看| 成人深夜福利视频在线| 最新91熟女九色地址| 18禁黄网站免费视频| 亚洲av乱码国产精品观看 | 国产精品v一区二区三区| 99亚洲综合一区二区三区| 国产精品色网在线播放| 亚洲另类综合日韩一区| 久久国产精品一区免费观看|