領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多上週我在一個客戶現場,人群中有一個問題:“為什麼 getConfigLocations() 不再是抽象的了?”在客戶面前工作一段時間後,你很少會說不出話來,但我當時就是。老實說,我第一個想法是客戶不可能對。但是瞧,在 AbstractSingleSpringContextTests 的修訂版 1.3 中,它清楚地表明 getConfigLocations() 不再是抽象的。我沒有針對 2.0.1 建立任何新的整合測試,所以我甚至沒有看到這個改變。
對此感到驚訝,我給 Juergen 發了封郵件,想弄清楚怎麼回事,以下是他的回覆:
這個改動是為了那些重寫了“contextKey()”和“loadContext(Object)”,並獲得某種其他形式的 ApplicationContext(非預設的 ClassPathXmlApplicationContext)的人。在這種情況下,“getConfigLocations()”就沒有意義了,因為它只對“contextKey()”的預設實現是相關的。所以任何重寫了這些鉤子的人都必須提供一個空的“getConfigLocations()”方法,這有點傻……如果我們一直希望人們提供配置位置,一開始就不應該暴露那些受保護的“contextKey()”和“loadContext(Object)”方法。
所以,簡而言之,你仍然可以像以前一樣重寫 getConfigLocations() 方法,只是你不再會收到一個抽象方法的提醒。
特別感謝 Gregory Kick 提出這個問題。