判斷乙個框架或者程式的好壞直觀的方法就是看其擴充套件性如何。
毫無疑問spring擴充套件性這方面做的不錯。
說到擴充套件主要還是在容器的refresh這塊,也有listener(這一塊先放放)
實現原則嚴格按照開閉原則,內部修改關閉,對擴充套件開放
咱們先看一張流程圖
如上圖中主要的畫出來了具體的執行流程,下面會具體說到每乙個擴充套件介面的使用場景
通過實現下面的介面可以動態註冊beandefinition
postprocessbeandefinitionregistry(beandefinitionregistry registry)
通過實現下面的介面可以修改所有註冊的beandefinition
postprocessbeanfactory(configurablelistablebeanfactory beanfactory)
實現該介面方法可以用於動態**或者增強bean
default object postprocessbeforeinstantiation(class> beanclass, string beanname) throws bean***ception
用於bean中的屬性值填充比如@autowired
default propertyvalues postprocesspropertyvalues(propertyvalues pvs, propertydescriptor pds, object bean, string beanname) throws bean***ception
用於判斷構造器方法
determinecandidateconstructors
發生bean迴圈依賴依賴的時候呼叫
default object getearlybeanreference(object bean, string beanname) throws bean***ception
這裡得看一段具體的**在該類中有如下方法,可以用來獲取容器的變數,用於專案中使用。
private
void
invokeawareinte***ces
(object bean)
if(bean instanceof
embeddedvalueresolveraware)if
(bean instanceof
resourceloaderaware)if
(bean instanceof)if
(bean instanceof
messagesourceaware)if
(bean instanceof)}
}
bean屬性設定之前對bean例項修改
default object postprocessbeforeinitialization(object bean, string beanname) throws bean***ception
bean屬性初始化之後對bean修改,aop**類實現的地方
default object postprocessafterinitialization(object bean, string beanname) throws bean***ception
初始化bean的時候呼叫,一般用來針對某個bean配置
afterpropertiesset
歡迎掃碼加入知識星球繼續討論
SpringBoot2啟動流程
springboot如果要說是springframework的封裝那麼也不全是,個人認為從思想上來說是兩個東西。springboot主要具備如下特性 1.自動裝配 2.內建tomcat等web容器 3.與devops天然整合,這也可以認為是微服務的特點。下面咱們看下 public class pub...
spring boot 2 基礎應用
restcontroller相當於 responsebody controller。使用spring initializer快速建立spring boot專案2 yaml語法 1 基本語法 k 空格 v 表示 對鍵值對 空格必須有 以空格的縮進來控制層級關係 只要是左對齊的一 列資料,都是同 個層級...
springBoot2 自動配置
雖然我們127個場景的所有自動配置啟動的時候預設全部載入 xautoconfiguration 但仍需按照條件裝配規則 conditional 按需配置。總結 springboot先載入所有的自動配置類 xxautoconfiguration 每個自動配置類按照條件進行生效,預設都會繫結配置檔案指定...