来自配置的属性占位符

时间:2013-02-06 08:23:06

标签: java spring

使用Spring在xml上下文中,我们可以像这样简单地加载属性:

<context:property-placeholder location:"classpath*:app.properties"/>

是否有机会在没有样板的情况下在@Configuration bean(〜来自java代码)中配置相同的属性?

谢谢!

3 个答案:

答案 0 :(得分:9)

您可以像这样使用注释@PropertySource

@Configuration
@PropertySource(value="classpath*:app.properties")
public class AppConfig {
 @Autowired
 Environment env;

 @Bean
 public TestBean testBean() {
     TestBean testBean = new TestBean();
     testBean.setName(env.getProperty("testbean.name"));
     return testBean;
 }
}

请参阅:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/context/annotation/PropertySource.html

编辑:如果您使用的是Spring引导,则可以使用@ConfigurationProperties注释将属性文件直接连接到bean属性,如下所示:

test.properties

name=John Doe
age=12

PersonProperties.java

@Component
@PropertySource("classpath:test.properties")
@ConfigurationProperties
public class GlobalProperties {

    private int age;
    private String name;

    //getters and setters
}

源: https://www.mkyong.com/spring-boot/spring-boot-configurationproperties-example/

答案 1 :(得分:6)

可以通过以下代码

完成手动配置
public static PropertySourcesPlaceholderConfigurer loadProperties(){
  PropertySourcesPlaceholderConfigurer propertySPC =
   new PropertySourcesPlaceholderConfigurer();
  Resource[] resources = new ClassPathResource[ ]
   { new ClassPathResource( "yourfilename.properties" ) };
  propertySPC .setLocations( resources );
  propertySPC .setIgnoreUnresolvablePlaceholders( true );
  return propertySPC ;
}

资料来源:Property Placeholder

答案 2 :(得分:0)

一个简单的解决方案是你的bean也将包含一些init函数:

在春季配置中,您可以提及:

<bean id="TestBean" class="path to your class" init-method="init" singleton="false" lazy-init="true" >

在通过setter设置所有属性后将调用

init,在此方法中,您可以覆盖已设置的属性,也可以设置任何属性。