我如何从一个ApplicationContext对象的属性值? (不使用的注释)(How do

2019-06-25 00:22发布

如果我有:

@Autowired private ApplicationContext ctx;

我可以用的的的getBean方法之一得豆和资源。 然而,我无法弄清楚如何获得属性值。

很显然,我可以创建具有@Value财产像一个新的bean:

private @Value("${someProp}") String somePropValue;

我叫的ApplicationContext对象上有什么方法来获取值,而不自动装配一个bean?

我通常使用的@Value,但在规划环境地政司表示需要是动态的情况,所以我不能只是使用注解。

Answer 1:

在SpeI位表达需要是动态的的情况下,手动地获得属性值:

somePropValue = ctx.getEnvironment().getProperty("someProp");


Answer 2:

假设${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方法来访问属性



Answer 3:

如果你是卡在春节前3.1,你可以使用

somePropValue = ctx.getBeanFactory().resolveEmbeddedValue("${someProp}");


文章来源: How do I get a property value from an ApplicationContext object? (not using an annotation)