2011-04-07 65 views
1

我正在使用Spring 3,并且还大量使用众所周知的@Autowire注释。我想创建一个新的注释,我们称之为@Property,它通过.property文件或vm参数设置自动装载Java属性。为注入属性创建类似注释的@Autowire

考虑下面的类

class A { 

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

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

这样的注释可能已经存在了吗?如果不是,我打算创建一个,如上所述。春季公用事业是否实现了我的目标?我想创建一个BeanPostProcessor ...

感谢您的提示!

回答

3

有已经这样一个注解 - @Value

你应该只定义一个PropertyPlaceHolderConfigurer,并配置它来解决系统性能。

+0

谢谢。那就是我正在寻找的东西。 – Erik 2011-04-07 16:27:33

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); 
    // ... 
}