使用Spring @Value元注释的注释不注入值

时间:2015-10-06 07:43:42

标签: java spring annotations

拥有属性文件和必要的context:properties-placeholder配置......

someproperty=somevalue

在Spring bean中我们可以:

@Value("${someproperty}")
private String someProperty;

其中someProperties值为"somevalue"

我想创建一个新的注释@Refreshable,其中@Value作为元注释,因此它的行为与直接使用@Value的行为相同。由于@Value需要一个值,我需要硬编码"default",希望@Refreshable's value()覆盖它:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Value("default")
public @interface Refreshable {
    String value();
}

然后当我在bean中使用新注释时,我希望它能够正常工作,注入声明的值"somevalue"

@Refreshable("${someproperty}")
private String someProperty;

但是我没有得到${someproperty}的值,而是“默认”。想法?

1 个答案:

答案 0 :(得分:0)

它已在4.3.0-BUILD-SNAPSHOT中解决。要覆盖@ Value的值,必须使用@AliasFor

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Value("")
public @interface Refreshable {

    @AliasFor(annotation=Value.class, attribute="value")
    String value();
}