Spring常見問題復習

############Spring#############
Bean的生命周期是什么?
BeanFactory和FactoryBean的區別?
ApplicationContext和BeanFactory的區別?
BeanFactoryAware注解,還有什么其它的Aware注解
BeanFactoryAware方法和@Bean注解的方法執行順序

問題:Aware和@Bean

  1. 實例化 Bean @Bean 方法執行,返回 Bean 對象
    Spring 會在解析配置類階段(ConfigurationClassPostProcessor)執行這個方法(@Bean的方法),返回一個 Bean 實例
  2. 屬性注入(依賴注入) 注入 @Autowired 字段或構造函數參數
  3. Aware 回調 執行 BeanNameAware, BeanFactoryAware, ApplicationContextAware 等
  4. 初始化回調 @PostConstruct / InitializingBean.afterPropertiesSet()
  5. 完成初始化 Bean 完成創建,交由容器使用

問題:@PostConstruct / InitializingBean.afterPropertiesSet()
特性 @PostConstruct InitializingBean.afterPropertiesSet()
所屬范疇 JSR-250 標準注解 Spring 特有接口
寫法簡潔 ? 是,注解方式,方法無參數 ? 否,需實現接口,覆蓋方法
執行時機 屬性注入完成后 屬性注入完成后
適合多個方法初始化? ? 支持多個 @PostConstruct 方法 ? 只能有一個 afterPropertiesSet() 方法
推薦程度 ? 推薦,優雅簡潔 ?? 次選,適合框架或基礎設施類使用
Bean 生命周期參與順序位置 執行在 Aware 接口回調之后 執行在 Aware 接口回調之后

問題:Bean生命周期
執行順序:

  1. 構造方法(Constructor)

  2. 依賴注入(字段、setter 方法)

  3. Aware 接口(如 BeanNameAware、ApplicationContextAware)

  4. @PostConstruct 方法

  5. InitializingBean.afterPropertiesSet()

  6. 自定義 init-method(如果有)

  7. BeanPostProcessor.postProcessBeforeInitialization() 初始化前后增強,多用于自動代理、AOP、動態注入

  8. 初始化完成

  9. BeanPostProcessor.postProcessAfterInitialization()

  10. Spring 容器完成刷新

  11. ApplicationRunner / CommandLineRunner 的 run() 方法 Spring 容器完全啟動后,啟動后邏輯、預熱緩存、拉取遠端配置等

    Bean 構建過程
    ┌───────────────────────────┐
    │ 構造函數 │
    │ 依賴注入(@Autowired) │
    │ Aware 接口回調(xxxAware)│
    │ @PostConstruct │
    │ InitializingBean / init() │
    │ BeanPostProcessor.before │
    │ — Bean 初始化完成 — │
    │ BeanPostProcessor.after │
    └───────────────────────────┘

     容器啟動完成后
    

┌────────────────────────────┐
│ ApplicationRunner / │
│ CommandLineRunner.run() │
└────────────────────────────┘

問題:BeanFactory和ApplicationContext(增強)
項目 BeanFactory(原始) ApplicationContext(增強)
定義 最基本的 IOC 容器接口 BeanFactory 的子接口,功能更豐富
初始化時機 懶加載:按需創建 Bean 預初始化:容器啟動時就創建單例 Bean
適合場景 內存敏感、輕量級框架 企業開發、功能完整的應用
是否支持國際化 否 是(有 MessageSource)
是否支持事件機制 否 是(ApplicationEventPublisher)
是否支持 AOP、注解 否 是(自動處理 @Autowired 等)
是否支持 @PostConstruct 等生命周期管理 否 是

BeanFactory 是懶加載:調用 getBean() 時才真正創建 Bean

能力 BeanFactory ApplicationContext
自動注入(@Autowired 等) ? ?
事件發布與監聽(ApplicationEvent) ? ?
國際化支持 ? ?
環境變量訪問(Environment) ? ?
Bean 后處理器(BeanPostProcessor 自動注冊) ? ?

BeanFactory

├── ListableBeanFactory
│ ↑
│ HierarchicalBeanFactory
│ ↑
│ ApplicationContext(重點)

BeanFactory 是 Spring 最原始的容器,ApplicationContext 是功能齊全的高級容器。
在 Spring Boot 中,默認用的就是 ApplicationContext(比如 AnnotationConfigApplicationContext)。

問題:BeanFactory和FactoryBean的區別?
BeanFactory:Spring 的 容器接口,負責管理和創建 Bean。
FactoryBean:你定義的一個 工廠 Bean,用于自定義創建某個對象的方式。

FactoryBean 是你定義的一個 Bean,用來創建其他 Bean。Spring 會調用它的 getObject() 方法返回真正的 Bean。
你可以用它來封裝復雜對象的創建邏輯(如代理對象、單例池對象、適配第三方庫對象等)。

// 加個 & 前綴,表示獲取工廠 Bean 本身
MyFactoryBean factoryBean = (MyFactoryBean) context.getBean(“&myBean”);

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

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

相關文章

C++_類和對象(下)

【本節目標】 再談構造函數Static成員友元內部類匿名對象拷貝對象時的一些編譯器優化再次理解封裝 1. 再談構造函數 1.1 構造函數體賦值 在創建對象時,編譯器通過調用構造函數,給對象中各個成員變量一個合適的初始值。 class Date { public:Date(in…

連續數據離散化與逆離散化策略

數學語言描述: 在區間[a,b]中有一組符合某分布的數據: 1.求相同區間中另一組符合同樣分布的數據與這組數據的均方誤差 2.求區間中點與數據的均方誤差 3.求在區間中均勻分布的一組數據與這組數據的均方誤差 一:同分布數據隨機映射 假設在…

Redash:一個開源的數據查詢與可視化工具

Redash 是一款免費開源的數據可視化與協作工具,可以幫助用戶快速連接數據源、編寫查詢、生成圖表并構建交互式儀表盤。它簡化了數據探索和共享的過程,尤其適合需要團隊協作的數據分析場景。 數據源 Redash 支持各種 SQL、NoSQL、大數據和 API 數據源&am…

FreeRTOS的空閑任務

在 FreeRTOS 中,空閑任務(Idle Task) 是操作系統自動創建的一個特殊任務,其作用和管理方式如下: 1. 空閑任務創建 FreeRTOS 內核自動創建:當調用 vTaskStartScheduler() 啟動調度器時,內核會自…

Java進階之旅-day05:網絡編程

引言 在當今數字化的時代,網絡編程在軟件開發中扮演著至關重要的角色。Java 作為一門廣泛應用的編程語言,提供了強大的網絡編程能力。今天,我們深入學習了 Java 網絡編程的基礎知識,包括基本的通信架構、網絡編程三要素、IP 地址、…

大數據(4.3)Hive基礎查詢完全指南:從SELECT到復雜查詢的10大核心技巧

目錄 背景一、Hive基礎查詢核心語法1. 基礎查詢(SELECT & FROM)2. 條件過濾(WHERE)3. 聚合與分組(GROUP BY & HAVING)4. 排序與限制(ORDER BY & LIMIT) 二、復雜查詢實戰…

Synopsys:設計對象

相關閱讀 Synopsyshttps://blog.csdn.net/weixin_45791458/category_12812219.html?spm1001.2014.3001.5482 對于Synopsys的EDA工具(如Design Compiler、PrimeTime、IC Compiler)等,設計對象(Design Objects)是組成整個設計的抽象表示&…

【愚公系列】《高效使用DeepSeek》053-工藝參數調優

??【技術大咖愚公搬代碼:全棧專家的成長之路,你關注的寶藏博主在這里!】?? ??開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主! ?? 江湖人稱"愚公搬代碼",用七年如一日的精神深耕技術領域,以"…

深度學習篇---模型訓練(1)

文章目錄 前言一、庫導入與配置部分介紹 二、超參數配置簡介 三、模型定義1. 改進殘差塊2. 完整CNN模型 四、數據集類五、數據加載函數六、訓練函數七、驗證函數八、檢查點管理九、主函數十、執行入口十一、關鍵設計亮點總結1.維度管理2.數據標準化3.動態學習率4.梯度剪裁5.檢查…

題解:AT_abc241_f [ABC241F] Skate

一道經典的 bfs 題。 提醒:本題解是為小白專做的,不想看的大佬請離開。 這道題首先一看就知道是 bfs,但是數據點不讓我們過: 1 ≤ H , W ≤ 1 0 9 1\le H,W\le10^9 1≤H,W≤109。 那么我們就需要優化了,從哪兒下手…

【含文檔+PPT+源碼】基于微信小程序的鄉村振興民宿管理系統

項目介紹 本課程演示的是一款基于微信小程序的鄉村振興民宿管理系統,主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含:項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行本套系統 3.該…

STM32定時器通道1-4(CH1-CH4)的引腳映射關系

以下是 STM32定時器通道1-4(CH1-CH4)的引腳映射關系的詳細說明,以常見型號為例。由于不同系列/型號差異較大,請務必結合具體芯片的參考手冊確認。 一、STM32F1系列(如STM32F103C8T6) 1. TIM1(高級定時器) 通道默認引腳重映射引腳(部分/完全)備注CH1PA8無互補輸出CH1…

bge-m3+deepseek-v2-16b+離線語音能力實現離線文檔向量化問答語音版

ollama run deepseek-v2:16b ollama pull bge-m3 1、離線聽寫效果的大幅度提升。50M 1.3G(每次初始化都會很慢)---優化到首次初始化使用0延遲響應。 2、文檔問答歷史問題處理與優化,文檔問答離線策略討論與參數暴露。 3、離線大模型答復中斷…

前端界面在線excel編輯器 。node編寫post接口獲取文件流,使用傳參替換表格內容展示、前后端一把梭。

首先luckysheet插件是支持在線替換excel內容編輯得但是瀏覽器無法調用本地文件,如果只是展示,讓后端返回文件得二進制文件流就可以了,直接使用luckysheet展示。 這里我們使用xlsx-populate得node簡單應用來調用本地文件,自己寫一個…

JavaScript學習20-Event事件對象

1.屬性 即點擊誰就打印出來誰 2.方法 未添加stopPropagatio方法: 添加stopPropagatio方法后:

FreeRTOS 啟動過程中 SVC 和 PendSV 的工作流程?

在 FreeRTOS 的啟動過程中,SVC(Supervisor Call) 和 PendSV(Pendable Service Call) 是兩個關鍵的系統異常,分別用于 首次任務啟動 和 任務上下文切換。它們的協作確保了從內核初始化到多任務調度的平滑過渡。以下是詳細的工作流程分析(以 ARM Cortex-M 為例): 1. SVC…

[自制調試工具]構建高效調試利器:Debugger 類詳解

一、引言 在軟件開發的漫漫征程中,調試就像是一位忠誠的伙伴,時刻陪伴著開發者解決代碼里的各類問題。為了能更清晰地了解程序運行時變量的狀態,我們常常需要輸出各種變量的值。而 Debugger 類就像是一個貼心的調試助手,它能幫我…

foobar2000 VU Meter Visualisation 插件漢化版 VU表

原英文插件點此 界面展示 下載 https://wwtn.lanzout.com/iheI22ssoybi 安裝方式 解壓安裝文件,文件名為:foo_vis_vumeter-0.10.2_CHINIESE.fb2k-component

消息中間件對比與選型指南:Kafka、ActiveMQ、RabbitMQ與RocketMQ

目錄 引言 消息中間件的定義與作用 消息中間件在分布式系統中的重要性 對比分析的四種主流消息中間件概述 消息中間件核心特性對比 消息傳遞模型 Kafka:專注于發布-訂閱模型 ActiveMQ:支持點對點和發布-訂閱兩種模型 RabbitMQ:支持點…

liunx輸入法

1安裝fcitx5 sudo apt update sudo apt install fcitx fcitx-pinyin 2配置為默認輸入法 設置-》系統-》區域和語言 點擊系統彈出語言和支持選擇鍵盤輸入法系統 3設置設置 fcitx-configtool 如果沒顯示需要重啟電腦 4配置fcitx 把搜狗輸入法放到第一位(點擊下面…