成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從LF的初始化加載來探究Spring生命周期

開發(fā) 前端
LF在在Springboot自動裝配過程中,對于節(jié)點的掃描和規(guī)則的初始化是不同的生命周期。正常的順序都應(yīng)該是:先注冊節(jié)點再初始化規(guī)則。如果出現(xiàn)了先初始化規(guī)則,再注冊節(jié)點,就會出現(xiàn)問題。LF的Springboot的自動裝配主要用到了Spring的兩個生命周期。

在社區(qū)里碰到過好幾次小伙伴運行的Demo報找不到注冊節(jié)點的問題。經(jīng)過查看發(fā)現(xiàn)都是對于Spring生命周期理解的問題。

LF在在Springboot自動裝配過程中,對于節(jié)點的掃描和規(guī)則的初始化是不同的生命周期。正常的順序都應(yīng)該是:先注冊節(jié)點再初始化規(guī)則。如果出現(xiàn)了先初始化規(guī)則,再注冊節(jié)點,就會出現(xiàn)問題。

LF的Springboot的自動裝配主要用到了Spring的兩個生命周期。

第一個是BeanPostProcessor,這個階段在受spring管理的bean初始化的前后,所以這個接口分為初始化前和初始化后兩個實現(xiàn)。LF是利用了初始化后這個生命周期來對所有的組件進行初始化。這個生命周期在整個spring生命周期相對中間的位置。

第二個是SmartInitializingSingleton,這個階段在所有受spring管理單例對象(非懶加載)初始化完成之后進行回調(diào)。LF是利用了所有的單例Bean都初始化好后這個生命周期來去解析定義好規(guī)則(包括項目內(nèi)的和其他存儲里的),這個生命周期在整個spring生命周期相對靠后的位置。

所以,對于普通的掃描節(jié)點來說,因為LF已經(jīng)嚴格控制了生命周期,所以不會出現(xiàn)問題。

凡是出問題的場景都是使用者自己利用代碼去注冊節(jié)點/鏈路,但使用者沒有選對正確的生命周期。

舉個最簡單的例子,使用者用代碼方式去額外定義規(guī)則。想要在系統(tǒng)啟動時去運行一段代碼,其實方式太多了。但是如果你使用在一個bean里用@PostConstruct注解去做這件事情,就有可能出現(xiàn)問題。

圖片圖片

從圖上可以看到,@PostConstruct這個注解是在初始化bean的過程中執(zhí)行,由于bean是一個個進入BeanPostProcessor這個生命周期的,如果使用者在這個周期里去定義鏈路并解析,由于鏈路所用到的節(jié)點很可能還未被初始化好,所以這時候就會報找不到節(jié)點的錯誤。

正確的做法是,使用者也去定義一個類,實現(xiàn)SmartInitializingSingleton或者去實現(xiàn)CommandLineRunner,利用這兩個比較靠后的生命周期去定義額外的規(guī)則。

推薦是采用更靠后的CommandLineRunner去定義,這個生命周期比SmartInitializingSingleton還要往后。非常適合用來做啟動系統(tǒng)后的一系列自定義業(yè)務(wù)。

同理,如果你在static塊中去定義規(guī)則,或是在構(gòu)造方法里去定義規(guī)則,其生命周期和@PostConstruct差不多。

再比如,你在CommandLineRunner里用代碼去定義額外節(jié)點。也是不行的,因為CommandLineRunner在SmartInitializingSingleton之后,等于說解析規(guī)則在注冊你自己額外節(jié)點之前,如果規(guī)則里寫了額外注冊的節(jié)點的話,那么也會報找不到節(jié)點。

總的方針就是:規(guī)則的定義和解析一定要在節(jié)點注冊之后。

在Spring中可供擴展的生命周期有很多。所以當開發(fā)者想要在系統(tǒng)啟動時額外做一些事情,有很多種選擇,但是開發(fā)者一定要清楚你的這個觸發(fā)時機是在整個生命周期的哪一步。

我之前整理過整個Spring啟動過程的完整生命周期圖,這次我用紅框標明了LF框架在注冊節(jié)點和解析規(guī)則所使用的兩個生命周期的相對位置。

圖片圖片

其中每一個生命周期的講解在之前我寫的一篇文章中也有詳細解析,這里附上鏈接:

Springboot啟動擴展點超詳細總結(jié),再也不怕面試官問了

LF CLUB

LF CLUB是由作者創(chuàng)辦的高級付費社區(qū)。

LF CLUB能幫助到所有LiteFlow框架的使用者,以及想使用LiteFlow的潛在開發(fā)者。

責任編輯:武曉燕 來源: 元人部落
相關(guān)推薦

2025-06-05 02:12:00

2012-03-13 13:38:42

Java

2009-11-11 15:29:15

ADO初始化

2022-10-19 23:28:55

Spring生命周期Bean

2015-07-08 16:28:23

weak生命周期

2024-05-28 07:55:31

SpringBean用域

2023-12-28 09:59:37

Spring容器XML

2022-04-19 07:20:24

軟件開發(fā)安全生命周期SSDLC應(yīng)用安全

2011-03-21 09:45:52

Hello WorldObjective-C生命周期

2013-12-06 17:52:08

2009-06-11 11:28:35

JSF生命周期

2010-07-14 10:48:37

Perl線程

2009-06-18 13:32:39

Java線程生命周期

2012-04-28 13:23:12

Java生命周期

2011-06-16 09:31:21

ActivityAndroid

2024-10-18 11:32:15

2019-10-16 10:50:13

Linux內(nèi)核測試

2013-07-29 05:11:38

iOS開發(fā)iOS開發(fā)學習類的'生命周期'

2012-01-16 09:00:56

線程

2009-06-17 15:06:50

Hibernate實體
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 在线国产一区 | 欧美一级艳情片免费观看 | 在线视频99 | 一区在线视频 | 奇米久久久 | 中文字幕视频在线看5 | 黄色片av | 神马九九 | 91亚洲精品国偷拍自产在线观看 | 欧美日韩一区在线播放 | 99精品国产一区二区三区 | 青青草在线播放 | 成人免费一区二区三区视频网站 | 国产精品视频网站 | 中文字幕一区二区三区在线观看 | 成人免费视频观看视频 | 91九色porny首页最多播放 | 一二三在线视频 | 一区二区电影网 | 精品久久久av | 午夜a级理论片915影院 | 精品欧美激情在线观看 | 免费观看一级视频 | 亚洲性人人天天夜夜摸 | 成人av播放 | 日韩一区中文字幕 | 国产一区二区中文字幕 | 久久久久www | 黄色网址在线免费观看 | 国产精品亚洲成在人线 | 午夜精品久久久久久久久久久久久 | 人人干人人看 | 一级免费视频 | 精品动漫一区 | 日本久久精品视频 | 福利片在线 | 女同av亚洲女人天堂 | 欧美久久一区 | 久久精品亚洲精品国产欧美 | 精品成人av | 美女在线视频一区二区三区 |