SpringBoot原始碼學習 三 環境準備

2022-07-07 11:36:10 字數 3251 閱讀 1055

stopwatch stopwatch = new stopwatch();

stopwatch.start();

collectionexceptionreporters = new arraylist<>();

// 配置無頭屬性, 設定該應用程式即使沒有檢測到顯示器也允許啟動

configureheadlessproperty();

// 開啟事件監聽,通知監聽者們(listener)執行相應操作

listeners.starting();

try

listeners.started(context);

}catch (throwable ex)

try

catch (throwable ex)

return context;

} // 建立和配置環境

configurableenvironment environment = getorcreateenvironment();

// 配置環境

// 將環境鏈結到configurationproperties屬性名下

configurationpropertysources.attach(environment);

// 發布環境準備事件

// 標準的servlet環境

return new standardservletenvironment();

case reactive:

// webflux環境

return new standardreactivewebenvironment();

default:

return new standardenvironment();}}

根據依賴關係例項化standardservletenvironment需例項化父類。推斷出首先執行org.springframework.core.env.abstractenvironment#abstractenvironment

public abstractenvironment()
org.springframework.web.context.support.standardservletenvironment重寫了customizepropertysources(mutablepropertysources)方法。

@override

protected void customizepropertysources(mutablepropertysources propertysources)

super.customizepropertysources(propertysources);

}

@override

protected void customizepropertysources(mutablepropertysources propertysources)

執行完此處**,源集合中的name為:

servletconfiginitparams,

servletcontextinitparams,

systemproperties,

systemenvironment

protected void configureenvironment(configurableenvironment environment, string args) 

// 配置屬性源

configurepropertysources(environment, args);

// 配置profiles

configureprofiles(environment, args);

}

在此應用程式的環境中新增,刪除或重新排序propertysource。

protected void configurepropertysources(configurableenvironment environment, string args) 

// 如果命令列引數存在,判斷名稱為commandlineargs的source存不存在,存在替換,不存在放入sources首,引數以命令列優先

if (this.addcommandlineproperties && args.length > 0)

else }}

配置檔案環境中哪些配置檔案處於活動狀態。在配置檔案處理過程中,可以通過spring.profiles.active屬性啟用其他配置檔案。

protected void configureprofiles(configurableenvironment environment, string args) 

private void configureignorebeaninfo(configurableenvironment environment)

}

將環境源鏈結到configurationproperties屬性名下

public static void attach(environment environment) 

if (attached == null)

}

參考: springboot原始碼學習(二) 發布啟動事件

void environmentprepared(configurableenvironment environment) 

}

springboot原始碼略讀

springboot的精髓是自動依賴注入。那麼哪些能自動注入呢,開啟spring boot autoconfigure,jar下的spring.factories。可以看到一堆這樣的配置 auto configure org.springframework.boot.autoconfigure.en...

SpringBoot原始碼分析

public class 第乙個引數 resourceloader 資源載入器 第二個引數 primarysources 載入的主要資源類 suppresswarnings public resourceloader resourceloader,class primarysources deduc...

Spring Boot 原始碼分析

1 專案初始化過程 springboot啟動類 springboot的啟動很簡單,如下 public static void main string args this.resourceloader resourceloader initialize sources private void ini...