該方法只做了一件事:設置了一個名為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想干什么呢?
其實是想設置該應用程序,即使沒有檢測到顯示器,也允許其啟動.
對於服務器來說,是不需要顯示器的,所以要這樣設置.