如何从ApplicationContext对象获取属性值? (不使用注释)

时间:2012-05-30 19:28:28

标签: spring spring-el

如果我有:

@Autowired private ApplicationContext ctx;

我可以使用其中一个getBean方法获取bean和资源。但是,我无法弄清楚如何获得属性值。

显然,我可以创建一个具有@Value属性的新bean,如:

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

我在ApplicationContext对象上调用什么方法来获取该值而不自动装配bean?

我通常使用@Value,但是有一种情况是SPeL表达式需要是动态的,所以我不能只使用注释。

3 个答案:

答案 0 :(得分:44)

如果SPeL表达式需要是动态的,请手动获取属性值:

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

答案 1 :(得分:15)

假设${someProp}属性来自PropertyPlaceHolderConfigurer,这会让事情变得困难。 PropertyPlaceholderConfigurer是一个BeanFactoryPostProcessor,因此仅在容器启动时可用。因此,bean在运行时无法使用这些属性。

解决方案是创建某种值集合器bean,使用所需的属性/属性进行初始化。

@Component
public class PropertyHolder{

    @Value("${props.foo}") private String foo;
    @Value("${props.bar}") private String bar;

    // + getter methods
}

现在,只要您需要属性,就可以将此PropertyHolder注入,并通过getter方法访问属性

答案 2 :(得分:9)

如果您遇到Spring 3.1之前的版本,可以使用

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