PropertyPlaceHolderConfigurer中的location是不是用錯了?
本文由作者張遠道授權網易雲社群釋出。
spring中常用PropertyPlaceHolderConfigurer來讀取properties配置檔案的配置資訊。常用的配置方式有兩種,一種是使用location
<bean id="property" >
<property="location" value="classpath:myproperty.propeties"/>
</bean>
另一種是使用locations
<bean id="property"
<property="locations">
<list>
<value>classpath:myproperty.propeties</value>
<value>classpath:myproperty1.properties</value>
</list>
</property>
</bean>
檢視PropertyPlaceHolderConfigurer的原始碼發現,整個PropertyPlaceHolderConfigurer的繼承樹中都沒有location整個屬性,僅僅只有locations這個屬性。如下圖所示。
因此,認為既然沒有location這個屬性,那使用時是不是不正確。但是仔細看看發現了PropertiesLoaderSupport中有setLocation()方法。
而檢視spring有關依賴注入的原始碼:
即獲得property對應的setter方法,以及property對應的值,然後通過反射,呼叫該方法即可。可以看出,不要求類的定義中真正包含改屬性,只要對應的setter方法被呼叫即可以。因此,ioc容器從xml配置中讀到屬性為location的值,然後獲得location對應的setter方法,即setLocation,然後通過反射,將location的值傳入了setLocation中。如下圖。
結論:location屬性沒有使用錯,而是spring根據反射呼叫setLocation方法,將location賦值給了locations了而已。
免費領取驗證碼、內容安全、簡訊傳送、直播點播體驗包及雲伺服器等套餐
更多網易技術、產品、運營經驗分享請訪問網易雲社群。
相關文章:
【推薦】 JVM記憶體回收區域+物件存活的判斷+引用型別+垃圾回收執行緒
【推薦】 【你離矽谷只差一步】網易中國創業家大賽專案火熱徵集中
【推薦】 Hive中文註釋亂碼解決方案