Spring創(chuàng)建Bean的流程分享
Spring創(chuàng)建Bean流程


大致步驟
簡單來說:Bean會經(jīng)歷四個階段: 實(shí)例化–》屬性賦值–》初始化–》銷毀
具體來說:
- 實(shí)例化:new xxx();有兩個時候會觸發(fā)實(shí)例化:
像容器申請一個Bean的時候
當(dāng)容器在初始化一個Bean的時候,發(fā)現(xiàn)該Bean還依賴另一個Bean。(在BeanDefinition中找到)
- 設(shè)置對象屬性:通過BD找到Bean需要注入的一些屬性,并注入,當(dāng)發(fā)現(xiàn)依賴另一個對象時,觸發(fā)另一個對象的實(shí)例化。
- 處理Aware接口:Spring會檢測對象是否實(shí)現(xiàn)了XxxAware接口,如果實(shí)現(xiàn)了,就會調(diào)用對應(yīng)的方法。例如BeanNameAware(對BeanName進(jìn)行設(shè)置)、BeanClassLoaderAware(傳入一個自定義類加載器)、BeanFactoryAware(擴(kuò)展BeanFactory)BeanPostProcessor的前置處理。
initializingBean: Spring檢測對象如果實(shí)現(xiàn)了這個接口,就會執(zhí)行他的afterPropertiesSet()方法,定制初始化邏輯。init-method:如果Spring發(fā)現(xiàn)Bean實(shí)現(xiàn)了這個屬性,就會調(diào)用他的配置方法,執(zhí)行初始化邏輯。或者使用注解 BeanPostProcessor的后置處理。到目前位置,Bean的創(chuàng)建過程就完成了,可以正常使用了。DisposableBean:當(dāng)Bean實(shí)現(xiàn)了這個接口,在銷毀前就會調(diào)用destory()方法destory-method:銷毀方法,可以進(jìn)行內(nèi)存回收,通過@PreDestory注解
各個接口介紹
1.什么是BeanDefinition?
? BeanDefinition 是定義 Bean 的配置元信息接口
- Bean 的類名
- 設(shè)置父 bean 名稱
- Bean 行為配置信息,作用域、自動綁定模式、生命周期回調(diào)、延遲加載、初始方法、銷毀方法等
- Bean 之間的依賴設(shè)置,dependencies
- 構(gòu)造參數(shù)、屬性設(shè)置

2.Aware接口
該接口是一個標(biāo)識接口,具體的方法需要子類自己去實(shí)現(xiàn)。
Aware類型的接口的作用就是讓我們能夠拿到Spring容器中的一些資源。
基本都能夠見名知意,Aware之前的名字就是可以拿到什么資源,例如BeanNameAware可以拿到BeanName,以此類推。
調(diào)用時機(jī)需要注意:所有的Aware方法都是在初始化階段之前調(diào)用的!
3.BeanPostProcessor
做通知。
4.initializingBean
afterPropertiesSet這個方法可以用在一些特殊情況中,也就是某個對象的某個屬性需要經(jīng)過外界得到。
比如說查詢數(shù)據(jù)庫等方式,這時候可以用到spring的該特性,只需要實(shí)現(xiàn)InitializingBean即可
5.init-method
用來替代繼承 InitializingBean接口
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot如何通過接口實(shí)現(xiàn)動態(tài)二維碼的定時刷新
這篇文章主要為大家詳細(xì)介紹了springboot如何通過接口實(shí)現(xiàn)動態(tài)二維碼的定時刷新功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-05-05
SpringBoot使用Sa-Token實(shí)現(xiàn)權(quán)限認(rèn)證
本文主要介紹了SpringBoot使用Sa-Token實(shí)現(xiàn)權(quán)限認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
為什么rest接口返回json建議采用下劃線形式,不要用駝峰
為什么rest接口返回json建議采用下劃線形式,不要用駝峰?今天小編就來為大家說明一下原因,還等什么?一起跟隨小編過來看看吧2020-09-09
詳解SpringBoot配置devtools實(shí)現(xiàn)熱部署
本篇文章主要介紹了詳解SpringBoot配置devtools實(shí)現(xiàn)熱部署 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
如何在Spring Boot項(xiàng)目中集成MQTT協(xié)議
本文介紹在SpringBoot中集成MQTT的步驟,包括安裝Broker、添加Eclipse Paho依賴、配置連接參數(shù)、實(shí)現(xiàn)消息發(fā)布訂閱、測試接口及注意事項(xiàng),如唯一客戶端ID、安全措施等,幫助開發(fā)者快速實(shí)現(xiàn)物聯(lián)網(wǎng)通信,感興趣的朋友一起看看吧2025-06-06

