我想添加一個自定義PropertySource(類,而不是註釋)。註釋是不夠的,因爲它只處理文件源。自動配置春天引導添加PropertySource
工作的方法是定義自己的ApplicationContextInitializer並向META-INF/spring.factories添加適當的聲明。 ApplicationContextInitializer只是使用: Environment.getPropertySources().addLast(...)
但也有一些缺點,主要表現在:
- 它總是運行,但最好的行爲是隻如果某些條件得到滿足運行(@ConditionalOnClass等)
如何實現這一目標?理想情況下,我會使用@Condition ... annotations編寫自動配置,並在裏面聲明這樣的初始化程序(最好是Ordered)。
編輯: 在我的特殊情況下,我想定義Archaius PolledConfigurationSource,但只有當Archaius是在類路徑上 - 這就是爲什麼我想一起向監聽器上的事件在生命週期很早就使用@ConditionalOnClass。
我不明白這有助於。如果我想通過包含/不包括jar來啓用/禁用archaius配置,那麼我可以創建一個只啓用archaius集成的彈簧自動配置jar。事情就是這樣做春天的方式 - 使其工作,如果任何依賴拉入archaius(如@ConditionalOnClass爲豆)。 – mabn