我有一个.properties文件。我可以根据需要将属性注入bean中。现在,我希望能够按名称搜索属性。
示例:
conf.properties:
a.persons=person1,person2,person3
a.gender=male
我可以使用注释注入这些属性。例如,
private @Value("${a.persons}") String[] persons
除此之外,我想搜索给出名字的属性的值,但我不知道如何去做。一个例子是:
properties.get("a.gender")
应返回字符串“male”。
这真的有可能吗?
更新:我使用了PropertyPlaceholderConfigurer
,如下所示:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:META-INF/config/server.properties</value>
<value>classpath:META-INF/config/ke/dev.properties</value>
</list>
</property>
</bean>
我应该如何更改它以便我可以将它注入我的bean?我该如何访问这些属性?提前谢谢。
答案 0 :(得分:1)
答案取决于您如何配置这些属性的注入。
如果您使用PropertyPlaceholderConfigurer
,则可以将Properties
声明为bean,并将其PropertyPlaceholderConfigurer
注入properties
(而不是locations
)。这样您也可以将Properties
直接注入您的bean。
如果您使用PropertySourcesPlaceholderConfigurer
,则可以将Environment
注入您的bean,并且可以通过它获取属性。
答案 1 :(得分:1)
根据@axtavt的建议,我创建了下面显示的bean,以帮助我搜索给定该属性名称的属性。我在我的解决方案中使用了@Environment和@PropertySource。我正在使用Spring 3.1,因此这个解决方案可能不适用于早期版本的Spring。
@Configuration
@PropertySource( "/META-INF/config/ke/dev.properties" )
@Service( value = "keConfigurer" )
public class ServiceConfiguration {
@Autowired
private Environment env;
public Environment getEnv() {
return env;
}
public void setEnv(Environment env) {
this.env = env;
}
}
我将此bean注入我希望使用它的任何其他类中。例如:
public class TestClass {
@Autowired
private ServiceConfiguration cfg;
String testProp = cfg.getEnv().getProperty("prop.name");
}
我希望它可以帮助别人。