[英]Difference context:property-placeholder VS @Configuration @PropertySource classpathproperties
我需要知道以下两种加载属性文件的方式之间的区别。
方法1
<context:property-placeholder location="classpath:constants.properties"/>
方法2
<context:component-scan base-package="com.snippets.enterprise"/>
package com.snippets.enterprise;
@Configuration
@PropertySource("classpath:/constants.properties")
public class SpringConfig {}
我在方法中看到在加载应用程序上下文时有两个键和值可用。 但在
当应用程序上下文正在加载时, 方法的属性的关键之一不可用,它说
找不到密钥。 请让我知道这两种方法的区别。
使用应用程序上下文加载属性文件时。
键入key时,属性文件的值将在容器中初始化。
两者实际上都是非常独立的。 让我尝试根据我的理解进行澄清:
使用context:property-placeholder
方法1注册了一个组件,该组件可以在bean定义中解析${propertyname}
形式的占位符。
而@PropertySource
批注为活动的Spring环境提供属性。
现在,回到方法1, context:property-placeholder
实际上足够聪明,知道它不仅需要查看通过其location
属性注册的属性,还需要查看当前活动环境中可用的属性(属性已通过@PropertySource
注释(如您的方法2)添加到其中。
因此,如果您希望继续解决占位符,则需要将方法1与方法2结合使用。
另一方面,如果您想专门使用方法2,那么最好的方法是在需要该属性并明确查找该属性的环境中进行注入,方法是:
@Component
public class MyBean {
@Autowired
private Environment environment;
public void mymethod() {
..
environment.getProperty("mykey");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.