如何在Spring中使用基于注释的属性

时间:2014-11-27 10:02:07

标签: java spring annotations

我想使用'其他属性' SomeIfaceDaoImpl里面的值

但是当我调试时,它总是为null,在我的bean定义内部以及我的bean构造函数中。我也尝试在我的课程中使用@Value注释,但这也不起作用。

但是,所有数据库值都可以在jdbcTemplate bean中正常工作。

我的属性文件包含

database.url=jdbc:mysql://localhost:3306/databasename
database.username=root
database.password=password
someotherproperty=HelloWorld

我的配置类:

@Configuration
@Profile("production")
@ComponentScan(basePackages = { "com.packagename" })
@PropertySource({"classpath:packagename.properties"})
public class ContextConfig {
    @Value("${database.url}")
    private String url;
    @Value("${database.username}")
    private String username;
    @Value("${database.password}")
    private String password;


    @Value("${someotherproperty}")
    private String someotherproperty;

    @Bean(name = "jdbcTemplate")
    public JdbcTemplate jdbcTemplate() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl(StringUtil.appendObjects(url, "?",     "useServerPrepStmts=false&rewriteBatchedStatements=true"));
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }

    @Bean
    public ISomeIfaceDao iSomeIfaceDao() {
        return new ISomeIfaceDaoImpl(); //<---- I would like to have someotherproperty value here or inside the constructor
    }

}

谢谢。

1 个答案:

答案 0 :(得分:1)

您应该可以使用其他属性&#39;直接在您的bean方法中,您的属性文件中没有错误配置。避免使用@Value注释多个字段的更好方法是使用Environment抽象

@Configuration
@Profile("production")
@ComponentScan(basePackages = { "com.packagename" })
@PropertySource({"classpath:packagename.properties"})
public class ContextConfig {

  @Autowired
  private Environment env;

  @Bean
  public ISomeIfaceDao iSomeIfaceDao() {
    return new ISomeIfaceDaoImpl(env.getRequiredProperty("someotherproperty"));
  }
}