如果我有:
@Autowired private ApplicationContext ctx;
我可以用的的的getBean方法之一得豆和资源。 然而,我无法弄清楚如何获得属性值。
很显然,我可以创建具有@Value财产像一个新的bean:
private @Value("${someProp}") String somePropValue;
我叫的ApplicationContext对象上有什么方法来获取值,而不自动装配一个bean?
我通常使用的@Value,但在规划环境地政司表示需要是动态的情况,所以我不能只是使用注解。
在SpeI位表达需要是动态的的情况下,手动地获得属性值:
somePropValue = ctx.getEnvironment().getProperty("someProp");
假设${someProp}
财产来源于提供一个PropertyPlaceholderConfigurer,这使事情困难。 该PropertyPlaceholderConfigurer是BeanFactoryPostProcessor的,因此只能在容器启动时间。 所以属性不可在运行时的bean。
一个解决办法是建立某种形式的数值架豆,你有你需要的属性/属性初始化的。
@Component
public class PropertyHolder{
@Value("${props.foo}") private String foo;
@Value("${props.bar}") private String bar;
// + getter methods
}
现在,这个注入PropertyHolder无论你需要的属性,并通过getter方法来访问属性
如果你是卡在春节前3.1,你可以使用
somePropValue = ctx.getBeanFactory().resolveEmbeddedValue("${someProp}");
文章来源: How do I get a property value from an ApplicationContext object? (not using an annotation)