Vue 和 Spring boot 和 Bean 不同生命周期

一、Vue 組件生命周期

在這里插入圖片描述
父子組件生命周期順序:

創建時:
父 beforeCreate → 父 created → 父 beforeMount → 子組件生命周期 → 父 mounted

更新時:
父 beforeUpdate → 子組件更新 → 父 updated。

銷毀時:
父 beforeDestroy → 子組件銷毀 → 父 destroyed。

二、Spring Boot 應用生命周期

Spring Boot 應用從啟動到關閉的全過程可分為三個階段,開發者可通過擴展點介入控制。

Ai 代碼

  • 啟動階段:

初始化SpringApplication:創建實例,準備啟動參數。
運行SpringApplication:調用run()方法啟動應用。
發布事件:ApplicationStartingEvent,標志應用開始啟動。

  • 配置加載階段:

加載默認配置:從spring-boot-starter-parent繼承。
加載應用配置:從application.properties或application.yml加載。
加載環境配置:根據激活的Profile加載特定配置。

  • Bean創建階段:

組件掃描:掃描帶有@Component等注解的類。
Bean定義:解析@Bean注解的方法。
依賴注入:通過@Autowired等注解注入依賴。

  • 上下文刷新階段:

刷新上下文:初始化非懶加載的Bean。
發布事件:ApplicationEnvironmentPreparedEvent、ApplicationPreparedEvent、ApplicationStartedEvent。

  • Web服務器啟動階段:

啟動嵌入式服務器:如Tomcat,開始監聽端口。
注冊Servlet和Filter:配置DispatcherServlet處理請求。

應用運行階段:
處理請求:接收并路由HTTP請求到控制器。
定時任務和異步處理:執行@Scheduled任務和@Async方法。

  • 關閉階段:

接收關閉信號:如SIGTERM或調用shutdown()。
執行關閉邏輯:停止服務器,銷毀Bean。
發布事件:ApplicationExitEvent,表示應用已退出。

三、Spring Bean 應用生命周期

  1. 實例化前
    元信息解析:容器解析配置文件(XML/Java/注解)中的 Bean 定義,生成 BeanDefinition 對象。
    驗證 Bean 的依賴關系是否滿足(如循環依賴檢測)

  2. 實例化
    反射創建:通過默認構造函數或無參工廠方法創建 Bean 實例。
    單例 vs 原型:
    單例(Singleton):容器啟動時立即實例化。
    原型(Prototype):每次通過 getBean() 獲取時創建新實例。

  3. 屬性賦值
    依賴注入:通過 @Autowired、@Value 或 XML 的 注入屬性值。
    依賴解析:解析 Bean 之間的引用關系,確保依賴項已初始化。

  4. 初始化前
    BeanPostProcessor 前處理:調用 postProcessBeforeInitialization,允許修改 Bean 或添加代理(如 AOP)。

  5. 初始化
    BeanNameAware:注入 Bean 的名稱。
    BeanFactoryAware:注入 BeanFactory 實例。
    ApplicationContextAware:注入應用上下文。


自定義初始化:
@PostConstruct 注解方法。
實現 InitializingBean 接口的 afterPropertiesSet()。
XML 配置的 init-method。
6. 初始化后
BeanPostProcessor 后處理:調用 postProcessAfterInitialization,完成最終增強(如生成動態代理)。
7. 使用階段
就緒狀態:Bean 已完全初始化,可供應用調用
8. 銷毀前
DestructionAwareBeanPostProcessor 處理:執行銷毀前的擴展邏輯(如關閉資源檢查)。
9. 銷毀
自定義銷毀:
@PreDestroy 注解方法。
實現 DisposableBean 接口的 destroy()。
XML 配置的 destroy-method。
作用域影響:
單例:容器關閉時自動觸發銷毀。
原型/請求/會話:需手動調用 destroy() 或依賴作用域結束。
在這里插入圖片描述
在這里插入圖片描述
最佳實踐
資源管理:
在 @PostConstruct 中初始化外部資源(如數據庫連接)。
在 @PreDestroy 中釋放資源(如關閉文件句柄)。

避免循環依賴 單出一篇 :
使用 @Lazy 延遲加載依賴項。
通過接口解耦設計。

作用域選擇:
默認使用單例,頻繁創建或需隔離狀態的 Bean 使用原型。
調試工具:
啟用 DEBUG 日志觀察 Bean 生命周期。
使用 Spring Boot Actuator 的 /beans 端點查看 Bean 狀態。

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

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

相關文章

Microsoft Azure 基礎知識簡介

Microsoft Azure 基礎知識簡介 已完成100 XP 2 分鐘 Microsoft Azure 是一個云計算平臺,提供一系列不斷擴展的服務,可幫助你構建解決方案來滿足業務目標。 Azure 服務支持從簡單到復雜的一切內容。 Azure 具有簡單的 Web 服務,用于在云中托…

C語言鏈接數據庫

目錄 使用 yum 配置 mysqld 環境 查看 mysqld 服務的版本 創建 mysql 句柄 鏈接數據庫 使用數據庫 增加數據 修改數據 查詢數據 獲取查詢結果的行數 獲取查詢結果的列數 獲取查詢結果的列名 獲取查詢結果所有數據 斷開鏈接 C語言訪問mysql數據庫整體源碼 通過…

【Maven】手動安裝依賴到本地倉庫

【Maven】手動安裝依賴到本地倉庫 【一】下載依賴【二】安裝 JAR 文件到本地倉庫【三】驗證安裝【四】在項目中使用該依賴【1】注意事項【2】額外提示 【一】下載依賴 登錄到中央倉庫下載依賴,中央倉庫地址:https://mvnrepository.com/ 搜搜你的依賴的a…

騰訊云golang一面

go垃圾回收機制 參考自:https://zhuanlan.zhihu.com/p/334999060 go 1.3 標記清除法 缺點 go 1.5 三色標記法 屏障機制 插入屏障 但是如果棧不添加,當全部三色標記掃描之后,棧上有可能依然存在白色對象被引用的情況(如上圖的對象9). 所以要對棧重新進行三色標記掃…

跨平臺嵌入式音視頻開發指南:EasyRTC音視頻通話的多場景適配與AI擴展能力

在數字化通信技術飛速發展的今天,實時音視頻通信已成為眾多智能設備和應用的核心功能。從智能家居到遠程辦公,從在線教育到智能安防,音視頻通信技術的應用場景不斷拓展,對低延遲、高穩定性和跨平臺兼容性的需求也在持續增長。在這…

Android 11 去掉性能受到影響通知

源碼位置: frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java final void finishBooting() {TimingsTraceAndSlog t = new TimingsTraceAndSlog(TAG + "Timing",Trace.TRACE_TAG_ACTIVITY_MANAGER);t.traceBegin("Finis…

Mac idea WordExcel等文件git modify 一直提示修改狀態

CRLF LF CR 換行符自動轉換問題 查看狀態:git config --global --list Mac需要開啟,window下需要關閉 關閉命令:git config --global core.autocrlf false 命令解釋: autocrlf true 表示要求git在提交時將crlf轉換為lf&a…

Apache Commons CLI 入門教程:輕松解析命令行參數

文章目錄 Apache Commons CLI 入門教程:輕松解析命令行參數一、什么是 Commons CLI?二、為什么選擇 Commons CLI?三、快速開始1. 添加依賴2. 基礎示例3. 運行示例1. 在Idea中運行2. 命令行中運行3. 使用 Maven/Gradle 運行(推薦&a…

VS2022調試嵌入式linux C# 程序 高效的開發方案

1.目標板子配置好ssh,確保PC可以連上 2.目標板子上傳VSDBG程序,詳見我的上一個文章 3.PC安裝winfsp, sshfs,SSHFS-Win Manager.傻瓜式安裝,將目標板子映射到PC的某個盤 4.VS2022中,你的工程的exe生成目錄到上面盤中某個路徑 5…

Python中如何加密/解密敏感信息(如用戶密碼、token)

敏感信息,如用戶密碼、API密鑰、訪問令牌(token)、信用卡號以及其他個人身份信息(PII),構成了現代應用程序和系統中最為關鍵的部分。這些信息一旦被未經授權的第三方獲取,可能引發災難性的后果,從個人隱私泄露到企業經濟損失,甚至是大規模的社會安全問題。保護這些敏感…

智能體開發的范式革命:Cangjie Magic全景解讀與實踐思考

引言:當智能體開發遇見倉頡魔法 在人工智能技術日新月異的今天,智能體(Agent)開發正從實驗室走向產業應用的核心舞臺。2025年3月,倉頡社區推出的Cangjie Magic開源平臺,以其創新的設計理念和技術架構,為這一領域帶來了…

【Java學習筆記】位運算

位運算 一、原碼,反碼,補碼 (1) 二進制的最高位是符號位:0 表示正數,1 表示負數(怎么記? 1旋轉一下變成-) (2) 正數的原碼、反碼、補碼都一樣(三碼合一) (3) 負數的反碼…

HttpSessionBindingListener 的用法筆記250417

HttpSessionBindingListener 的用法筆記250417 HttpSessionBindingListener 是 Java Servlet 規范中 唯一 由 被存儲對象自身實現 的會話監聽接口, 1. 核心功能 HttpSessionBindingListener 是一個由 會話屬性對象自身實現 的接口,用于監聽該對象被綁定…

【HDFS入門】HDFS高可用性與容錯機制深度解析

目錄 引言 1 HDFS高可用架構實現 1.1 基于QJM的NameNode HA架構 1.2 QJM vs NFS實現對比 2 故障切換流程與ZooKeeper作用 2.1 自動故障轉移流程 2.2 狀態轉換機制 3 數據恢復與副本管理 3.1 DataNode故障處理流程 4 快照與數據保護機制 4.1 HDFS快照架構 4.2 快照使…

04-libVLC的視頻播放器:獲取媒體信息

libvlc_media_t* libvlc_media_player_get_media(libvlc_media_player_t* p_mi); 功能說明 核心作用:獲取與媒體播放器關聯的當前媒體對象返回值:成功:返回libvlc_media_t*指針失敗/無關聯媒體:返回NULL內存管理:返回的媒體對象引用計數會增加,需要使用libvlc_media_rele…

使用datax通過HbaseShell封裝writer和reader同步hbase數據到hbase_踩坑_細節總結---大數據之DataX工作筆記008

最近在做大數據相關功能,有個需求,使用datax同步hbase到hbase中,其中還是有很多細節值得記錄: 首先來看一下datax的源碼中,如果你使用phoenix創建的表,那么 你就需要使用對應的hbase帶有sql字樣的,reader和writer. 然后如果你使用datax-web來進行測試的,那么,他默認使用的是h…

如何通過window端來ssh連接本地虛擬機的ubuntu

首先在 Ubuntu 虛擬機上安裝和配置 SSH 服務: # 安裝 SSH 服務器 sudo apt update sudo apt install openssh-server# 檢查 SSH 服務狀態 sudo systemctl status ssh# 如果沒有啟動,則啟動 SSH 服務 sudo systemctl start ssh# 設置開機自啟動 sudo sys…

Anolis OS 8.10 發布:軟硬協同優化,滿足多行業實際應用需求

引言 龍蜥操作系統 Anolis OS 8 是 OpenAnolis 龍蜥社區發行的開源 Linux 發行版,支持多計算架構,提供穩定、高性能、安全、可靠的操作系統支持。Anolis OS 8.10 是 Anolis OS 8 發布的第六個小版本,通過軟硬協同,不斷完善生態&a…

Java八種常見的設計模式

一、單例模式 單例模式是(Singleton Pattern)Java中最常用的設計模式之一,它保證一個類僅有一個實例,并提供一個全局訪問點。 實現單例模式的核心是將類的構造方法私有化,以防止外部直接通過構造函數創建實例。同時&am…

4.17---實現商鋪和緩存與數據庫雙寫一致以及宕機處理

實現商鋪和緩存與數據庫雙寫一致(以及強雙寫一致策略) redis點評項目采用的是延時雙刪策略 雙刪: 我們更新完數據庫之后刪除緩存,這樣即使有線程并發進來查詢,會發現緩存中沒有數據,從而會去mysql中查找…