【JavaEE進階】 Bean的作用域與生命周期

文章目錄

  • 🍃Bean的作用域
    • 🚩作用域的使用
    • 🚩觀察Bean的作用域
      • 🎈單例作用域
      • 🎈多例作用域
      • 🎈請求作用域
      • 🎈會話作?域
      • 🎈Application作?域
  • 🎄Bean的?命周期
  • ?總結

🍃Bean的作用域

Bean的作?域是指Bean在Spring框架中的某種?為模式.

比如單例作?域:表? Bean 在整個Spring 中只有?份, 它是全局共享的.那么當其他?修改了這個值之后,那么另?個?讀取到的就是被修改的值.

在Spring中?持6種作?域,后4種在Spring MVC環境才?效

  1. singleton:單例作?域

  2. prototype:原型作?域(多例作?域)

  3. request:請求作?域

  4. session:會話作?域

  5. Application: 全局作?域

  6. websocket:HTTP WebSocket 作?域

作?域說明
singleton每個Spring IoC容器內同名稱的bean只有?個實例(單例)(默認)
prototype每次使?該bean時會創建新的實例(?單例)
request每個HTTP 請求?命周期內,創建新的實例(web環境中)
session每個HTTP Session?命周期內,創建新的實例(web環境中)
application每個ServletContext?命周期內,創建新的實例(web環境中)
websocket每個WebSocket?命周期內,創建新的實例(web環境中)

🚩作用域的使用

簡單使用如下:

首先我們準備一個 Dog 類如下:

public class Dog {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}

接下來我們定義幾個不同作用域的 Bean

@Component
public class DogBean {@Beanpublic Dog dog() {Dog dog = new Dog();dog.setName("旺財");return dog;}@Bean@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)public Dog singleDog(){Dog dog = new Dog();return dog;}@Bean@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)public Dog prototypeDog(){Dog dog = new Dog();return dog;}@Bean@RequestScopepublic Dog requestDog() {Dog dog = new Dog();return dog;}@Bean@SessionScopepublic Dog sessionDog() {Dog dog = new Dog();return dog;}@Bean@ApplicationScopepublic Dog applicationDog() {Dog dog = new Dog();return dog;}
}

需要注意的是

@RequestScope 等同于
@Scope(value =WebApplicationContext.SCOPE_REQUEST, proxyMode=ScopedProxyMode.TARGET_CLASS)

@SessionScope 等同于
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode=ScopedProxyMode.TARGET_CLASS)

@ApplicationScope 等同于 @Scope(value=WebApplicationContext.SCOPE_APPLICATION,proxyMode=ScopedProxyMode.TARGET_CLASS)

proxyMode?來為springbean設置代理.

proxyMode = ScopedProxyMode.TARGET_CLASS

表?這個Bean基于CGLIB實現動態代理.

Request,session和application作?域的Bean需要設置proxyMode

接下來我們再寫一些程序進行測試,測試不同作?域的Bean取到的對象是否?樣,測試程序如下:

@RestController
public class DogController {@Autowiredprivate Dog singleDog;@Autowiredprivate Dog prototypeDog;@Autowiredprivate Dog requestDog;@Autowiredprivate Dog sessionDog;@Autowiredprivate Dog applicationDog;@Autowiredprivate ApplicationContext applicationContext;@RequestMapping("/single")public String single(){Dog contextDog = (Dog)applicationContext.getBean("singleDog");return "dog:"+singleDog.toString()+"|-- --|contextDog:"+contextDog;}@RequestMapping("/prototype")public String prototype(){Dog contextDog = (Dog)applicationContext.getBean("prototypeDog");return "dog:"+prototypeDog.toString()+"|-- --|contextDog:"+contextDog;}@RequestMapping("/request")public String request(){Dog contextDog = (Dog)applicationContext.getBean("requestDog");return"dog:"+requestDog.toString()+"|-- --|contextDog:"+contextDog.toString();}@RequestMapping("/session")public String session(){Dog contextDog = (Dog)applicationContext.getBean("sessionDog");return "dog:"+sessionDog.toString()+"|-- --|contextDog:"+contextDog.toString();}@RequestMapping("/application")public String application(){Dog contextDog = (Dog)applicationContext.getBean("applicationDog");return "dog:"+applicationDog.toString()+"|-- --|contextDog:"+contextDog.toString();}
}

🚩觀察Bean的作用域

接下來我們來進行訪問

🎈單例作用域

  • http://127.0.0.1:8080/single

多次訪問,得到的都是同?個對象,并且 @Autowired 和applicationContext.getBean() 也是同?個對象.

在這里插入圖片描述

🎈多例作用域

  • http://127.0.0.1:8080/prototype

觀察ContextDog,每次獲取的對象都不?樣(注?的對象在Spring容器啟動時,就已經注?了,所以多次請求也不會發?變化)
在這里插入圖片描述

🎈請求作用域

  • http://127.0.0.1:8080/request

在?次請求中, @Autowired 和 applicationContext.getBean() 也是同?個對象.但是每次請求,都會重新創建對象

在這里插入圖片描述

🎈會話作?域

  • http://127.0.0.1:8080/session

在?個session中,多次請求,獲取到的對象都是同?個.
在這里插入圖片描述

換?個瀏覽器訪問,發現會重新創建對象.(另?個Session)

在這里插入圖片描述

🎈Application作?域

  • http://127.0.0.1:8080/application

在?個應?中,多次訪問都是同?個對象
在這里插入圖片描述

Application scope就是對于整個web容器來說,bean的作?域是ServletContext級別的.

這個和singleton有點類似,區別在于:Application scope是ServletContext的單例,singleton是?個ApplicationContext的單例.

在?個web容器中ApplicationContext可以有多個

🎄Bean的?命周期

?命周期指的是?個對象從誕?到銷毀的整個?命過程,我們把這個過程就叫做?個對象的?命周期.
Bean的?命周期分為以下5個部分:

  1. 實例化(為Bean分配內存空間)
  2. 屬性賦值(Bean注?和裝配,?如 @AutoWired )
  3. 初始化
    • 執?各種通知,如 BeanNameAware ,BeanFactoryAware ,ApplicationContextAware 的接??法.
    • 執?初始化?法
      • xml定義 init-method
      • 使?注解的?式 @PostConstruct
      • 執?初始化后置?法( BeanPostProcessor )
  4. 使?Bean
  5. 銷毀Bean
    • 銷毀容器的各種?法,如 @PreDestroy , DisposableBean 接??法, destroymethod.

實例化和屬性賦值對應構造?法和setter?法的注入.

初始化和銷毀是用戶能?定義擴展的兩個階段,可以在實例化之后,類加載完成之前進??定義"事件"處理.

?如我們現在需要買?棟房?,那么我們的流程是這樣的:

  1. 先買房(實例化,從?到有)
  2. 裝修(設置屬性)
  3. 買家電,如洗?機,冰箱,電視,空調等([各種]初始化,可以?住);
  4. ?住(使?Bean)
  5. 賣房(Bean銷毀)

執行流程如下圖所示:
在這里插入圖片描述

?總結

關于《【JavaEE進階】 Bean的作用域與生命周期》就講解到這兒,感謝大家的支持,歡迎各位留言交流以及批評指正,如果文章對您有幫助或者覺得作者寫的還不錯可以點一下關注,點贊,收藏支持一下!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13015.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13015.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13015.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win11家庭中文版安裝docker,報錯 Docker Engine stopped

先引一下這位博主的鏈接超詳細Windows11家庭中文版系統安裝Docker-20230401_windows11安裝docker-CSDN博客,我到前五步(跳出頁面重啟)和博主都是一樣的,但是第六步我并沒有報錯,直接跳出docker界面 記錄一下我的解決辦法,首先按照…

金價又雙叒漲了!現貨黃金什么比較好

雖然近期有新聞顯示,國內的實物黃金價格出現大幅的下跌,但是從整體看,多個黃金投資品種的長期上升趨勢還是比較穩定的,因此我們會看到,很多投資者會趁現在這波下跌重新入場做多。那么投資黃金買什么比較好呢&#xff1…

Java中的類與對象-深入探索

在Java編程的世界里,類(Class)和對象(Object)是兩個核心概念。它們是面向對象編程(OOP)的基石,使得Java能夠處理復雜的數據結構和交互。本文將深入解析Java中的類和對象,…

淺述遙感技術在農業領域的應用

雖久未更新,但本文依舊延續以前敘述風格,即以通俗易懂方式描述關鍵問題。 本文章節安排如下: 簡述背景;介紹在農業領域的主要應用技術的關鍵問題;總結和實例介紹。 1 背景描述-何為遙感圖像? 一般來說&a…

如何向全國各大新聞網站投稿?

在信息爆炸的時代,新聞媒體的投稿工作對于單位的信息宣傳員來說,既是一項重要的職責,也是一項充滿挑戰的任務。作為一名信息宣傳員,我負責著單位的對外信息宣傳投稿工作,每個月都需要在各大媒體上發表文章,以展示單位的成果和風采。 然而,剛開始的投稿之路并不順暢。我習慣性地…

4種企業防泄密的辦法,強烈推薦第二種

4種企業防泄密的辦法,強烈推薦第二種 企業信息泄密常見的原因有內部人員、黑客、違規收集信息、第三方合作商,以下將為你詳細分析這些泄密原因以及應對的方法。 1、內部人員泄密 內部員工由于能夠接觸到敏感數據,成為主要的泄露數據群體。這…

springboot 序列化和反序列化

介紹 在Java中,序列化和反序列化是一種將對象轉換為字節流或將字節流轉換為對象的機制。通過序列化,可以將對象存儲到文件中、傳輸到網絡上,或者在分布式系統中進行對象的傳遞。本文將詳細介紹Java序列化和反序列化的原理、使用方法和常見應用…

優路教育:以實干、創新、永不言敗的精神內核,推動新時代職教發展

隨著“教育家精神”的提出,新時代下人民教師的職業內涵更為豐富,同時也被賦予了更為崇高的教育使命。強教必先強師,加強教師隊伍建設是建設教育強國重要的基礎工作。由此,打造一批勤勉敬業、創新實干的教師隊伍,成為了…

2024最新洗地機推薦,洗地機怎么選?熱門品牌哪個最好用?

在現代生活中,忙碌的日常讓家庭清潔變得更加繁重和耗時。然而,洗地機的引入徹底改變了這一狀況。憑借其強大的清潔效果和簡便的使用方式,洗地機能夠迅速清除地面上的各種污垢,使清潔工作變得輕松自如。正因為如此,洗地…

JWT生成token工具類實現

JWT簡介 JWT定義 JWT全稱為Json web token,也就是 Json 格式的 web token JWT數據結構 1.JWT由三段字符串組成,中間用.分隔 Project_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwiZXhwIjoxNzE2MzcwMTM0LCJpYXQiOjE3MTU3NjUzMzQsImp0aSI6IjllO…

cookie,session, token 的特點與區別

Cookie、Session 和 Token 在 Web 開發中扮演著不同的角色,各自具有特點和區別: Cookie 存儲在用戶的瀏覽器中,是由服務器發送到客戶端并存儲在客戶端的小型文本文件。可以包含有關用戶的信息,如身份驗證令牌、用戶偏好設置等。可…

MySQL觸發器 ,視圖索引 , 事務

MySQL進階二 補充觸發器知識 # 刪除觸發器代碼 drop trigger 觸發器名;# 當一個學員發生轉班,班級對應的總數進行同步變化# 當一個學員發生轉班,班級對應的總數進行同步變化delimiter !!create trigger movestudent after update on stu1 for each ROW…

力扣HOT100 - 152. 乘積最大子數組

解題思路&#xff1a; 方法一&#xff1a;暴力 class Solution {public int maxProduct(int[] nums) {int max Integer.MIN_VALUE;int s 1;for (int i 0; i < nums.length; i) {s 1;for (int j i ; j < nums.length; j) {s * nums[j];max Math.max(max, s);}}ret…

出國旅游常用英語,柯橋成人英語培訓

Where can I catch a taxi?哪里我可以叫到出租車&#xff1f; The taxi zone is right on the left corner over there.出租車站臺就在左邊轉角處。 Are you free?您有空嗎&#xff1f; Sure. Where are you going?當然。您要去哪里&#xff1f; Drive me back to Santa …

手工創建 kamailio database tables

有些場景可能kamdbctl create不好使&#xff0c;可能需要手工創建 kamailio database tables&#xff0c;可參考下面的命令序列&#xff1a; USE mysql # 刪除之前創建的用戶 SELECT user,host FROM user; DROP USER kamailio%; FLUSH PRIVILEGES; # 刪除之前創建的數據庫 DROP…

#Docker | Ngrok# 使用Ngrok和Docker進行內網穿透

一、注冊 Ngrok官網注冊&#xff0c;可以使用gmail或者outlook郵箱&#xff0c; 正常填寫后你會收到一封電子郵件&#xff0c;點擊郵件中鏈接即注冊成功 二、獲取密鑰 登錄&#xff0c;點擊Your Authtoken&#xff0c;最上面copy左邊就是你得密鑰 三、使用內網穿透啟動docker…

c++20---std::erase----std::erase_if

問題&#xff1a;如何刪除滿足條件的所有元素。 erase #include <iostream> #include <algorithm> #include <vector>int main(){std::vector<int> vec{1,2,3,1,1,1,1,1};std::erase(vec,1);for(int v:vec) std::cout<<v<<" "…

與禹老師學前端vue3學習匯總

24.5.15&#xff1a; 創建Vue3工程 1.確定自己電腦有沒有nodejs環境&#xff0c;在cmd中輸入node&#xff0c;如果出現Node.js的版本號說明已經有這個環境了&#xff0c;否則搜索Node.js安裝 2.先在D盤創建一個文件夾Vue3_Study&#xff0c;然后在這個空文件夾中右鍵選擇終端…

IPv6監測指標有哪些?如何才算真正完成IPv6的升級改造?

我國始終高度重視IPv6的發展建設&#xff0c;將IPv6視作未來互聯網發展的方向之一&#xff0c;自2017年《推進互聯網協議第六版&#xff08;IPv6&#xff09;規模部署行動計劃》印發以來&#xff0c;又多次發布IPv6相關的政策法規&#xff0c;以推進IPv6的規模化部署。在政策引…

首次曝光!我喂了半年主食凍干,喵狀態真滴頂~

科學養貓理念的推廣&#xff0c;使得主食凍干喂養越來越受到養貓者的歡迎。主食凍干不僅符合貓咪的自然飲食習慣&#xff0c;還能提供豐富的營養&#xff0c;有助于保持貓咪的口腔和消化系統健康。我家喂了半年主食凍干&#xff0c;貓咪的狀態是真的不一樣了&#xff01; 然而…