在标准的Spring应用程序中,可以定义PropertyPlaceholderConfigurer,它将加载一个或多个属性文件。然后,文件中定义的值对应用程序的其余部分可见,包括XML("${}"
)和Java(@Value
)。
加载上下文后,有没有办法从上下文中获取这样的属性值,方法与检索bean的方式类似(ctx.getBean("bean-name")
)?
我尝试了以下操作,但它不起作用:
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:META-INF/spring/spring-context.xml");
ctx.refresh();
ctx.start();
ctx.getEnvironment().getProperty("key-name")); // RETURNS NULL
由于
答案 0 :(得分:4)
您需要访问BeanFactory
:
ctx.getBeanFactory().resolveEmbeddedValue("${key-name}");
答案 1 :(得分:1)
请参阅此答案,了解一种简单的方法,该方法可以通过将名为EmbeddedValueResolverAware的接口添加到要在其中解析属性值的类来实现。
答案 2 :(得分:0)
可以使用Environment
方法从resolvePlaceholders
中检索嵌入式变量。请注意,您需要将其包装在${}
中:
ctx.getEnvironment().resolvePlaceholders("${key-name}")