为注入属性创建@Autowire之类的注释

时间:2011-04-07 16:10:20

标签: java spring java-ee

我正在使用Spring 3,并且还大量使用着名的@Autowire注释。我想创建一个新的注释,让我们称它为@Property,它通过.property文件或vm参数设置自动装配Java属性。

考虑以下课程

class A {

    @Property("my.a")
    private int a;
}

如果属性my.a存在,则设置属性A.a。

这样的注释是否已经存在?如果不是,我打算创建一个,如上所述。春天给出的公用事业是否达到我的目标?我想创建一个BeanPostProcessor ...

感谢您的提示!

2 个答案:

答案 0 :(得分:3)

已有这样的注释 - @Value

您应该只定义PropertyPlaceHolderConfigurer,并将其配置为解析系统属性。

答案 1 :(得分:0)

参考http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/

您可以使用@ImportResource导入XML配置文件。然后使用context:property-placeholder加载属性

@Configuration
@ImportResource("classpath:/com/acme/properties-config.xml")
public class AppConfig {
    private @Value("${jdbc.url}") String url;
    private @Value("${jdbc.username}") String username;
    private @Value("${jdbc.password}") String password;

    public @Bean DataSource dataSource() {
       return new DriverManagerDataSource(url, username, password);
    }
}

properties-config.xml
   <beans>
      <context:property-placeholder location="classpath:/com/acme/jdbc.properties"/>
   </beans>

jdbc.properties
   jdbc.url=jdbc:hsqldb:hsql://localhost/xdb
   jdbc.username=sa
   jdbc.password=

public static void main(String[] args) {
   ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
   TransferService transferService = ctx.getBean(TransferService.class);
   // ...
}