Чтобы подробнее рассказать о предложении cletus, я бы сказал, что вам нужен собственный подкласс PropertyPlaceholderConfigurer, и переопределите метод resolPlaceholder (), который вызовет ваш код Configuration.getDb (). Если вы не можете разрешить значение, делегируйте его обратно суперклассу.
Например:
public class MyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
@Override
protected String resolvePlaceholder(String placeholder, Properties props) {
String value = Configuration.getDb().get(placeholder)
if (value == null) {
value = super.resolvePlaceholder(placeholder, props);
}
return value;
}
}
Затем просто определите bean-компонент типа MyPlaceholderConfigurer в контексте вашего приложения, и Spring автоматически проведет консультации с вашим классом для определения значений заполнителей.
Если ваш компонент Configuration.getDb () не может разрешить значение, то делегирование обратно суперклассу позволяет Spring вместо этого искать значение как системное свойство. Кроме того, вы можете добавить файл свойств в компонент, и он также может это проверить.
Прочтите справочные документы по основному использованию PropertyPlaceholderConfigurer, чтобы понять, как он работает. Это довольно гибкий.