SpringBoot啟動源碼探究----configureHeadlessProperty()方法


該方法只做了一件事:設置了一個名為java.awt.headless的系統屬性,源碼如下:

private void configureHeadlessProperty() {
System.setProperty(SYSTEM_PROPERTY_JAVA_AWT_HEADLESS, System.getProperty(
SYSTEM_PROPERTY_JAVA_AWT_HEADLESS, Boolean.toString(this.headless)));
}
其中:
SYSTEM_PROPERTY_JAVA_AWT_HEADLESS="java.awt.headless";
又調用了System類的兩個方法:setProperty(String key,String value)和getProperty(String a,String b)

上述含義是:

給屬性設值System.setProperty(),它的值來源於System.getProperty(),奇怪了,為什么把屬性從一個地方取出來,然后又設置到同一個地方,這不是多此一舉嗎?

其實這是因為System中的兩個讀寫屬性的方法不對等.

System中getProperty()有2個重載方法,但卻只有一個setProperty()方法,其中getProperty()有單參和雙參兩方法,單參就是簡單的獲取屬性,有就有,沒有就沒有,雙參則聰明一點,在沒有的時候會返回一個調用者指定的默認值,所以經過這樣操作后,不管有沒有那個屬性,最終都能保證有.

所以先取后設.

那么:做了這樣的操作后,SpringBoot想干什么呢?

其實是想設置該應用程序,即使沒有檢測到顯示器,也允許其啟動.

對於服務器來說,是不需要顯示器的,所以要這樣設置.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM