Как я могу динамически получить доступ к оборудованию @Value во время выполнения?@Value at runtime
Я думал, что окружающая среда может быть то, что я искал, но
@Component
public class SpringConfiguration implements ConfigurationI {
@Autowired
private Provider<Environment> env;
@Override
public String get(String key) {
try {
return env.get().getRequiredProperty(key);
} catch (IllegalStateException e) {
return null;
}
}
}
К сожалению, это не получить доступ к значениям, предоставляемые нашей PropertyPlaceholderConfigurer
боба.
EDIT: пояснить мой пример использования. Это часть создания библиотеки с множеством частей, специфичных для весны (которые зависят от кучи старых весенних приложений), используемых в новых приложениях Guice путем переключения специальных аннотаций Spring для JSR 330 (javax.inject). Я надеялся избежать переписывания всего материала PropertyPlaceholderConfigurer
во всех наших приложениях Spring, предоставляя приятную точку входа, подобную этой. Если есть еще один лучший способ сделать это (возможно, с @Named?), То я все уши.
EDIT2: Это (очищенный) пример того, какой тип PropertyPlaceholderConfigurer существует в приложениях, вызывающих эту библиотеку.
@Bean
public PropertyPlaceholderConfigurer placeholderConfigurer() {
return new PropertyPlaceholderConfigurer() {
@Override
protected String resolvePlaceholder(String placeholder, Properties props) {
// Some code to parse and cleanup key here
String result = getPropertyFromLocalAppSpecificConfig(key);
if (result == null) {
result = super.resolvePlaceholder(placeholder, props);
}
// Some more random app specific logic for missing defaults
return result;
}
};
}
Как ваш 'PropertyPlaceholderConfigurer' настроен? –
Я добавил пример на мой вопрос. Это инъекционный компонент. – kazagistar