如何外部化自定义注释的默认属性值

时间:2012-06-19 07:32:32

标签: spring annotations

假设我有一个自定义注释,如下所示:

public @interface myLimits {

    int MIN_LIMIT = 400;

    int stockLimit() default MIN_LIMIT;
}

我们可以将它外部化为属性文件,而不是在注释定义中对MIN_LIMIT的值进行硬编码吗?

如下所示 - 假设“min.limit”在属性文件中定义。

public @interface myLimits {

    @value("${min.limit}")
    int MIN_LIMIT;

    int stockLimit() default MIN_LIMIT;
}

如何外部化MIN_LIMIT而不是硬编码?

1 个答案:

答案 0 :(得分:1)

严格来说:你做不到。注释在代码的其余部分之前在单独的编译循环中处理,这意味着注释中任何位置出现的所有内容都必须是编译时常量。

Here's what the JLS has to say about it:

  

元素类型T仅与元素值V相当   如果满足下列条件之一:

     
      
  • T是一个数组类型E []并且:   
        
    • V是一个   ElementValueArrayInitializer和每个ElementValueInitializer   (类似于数组初始化器中的变量初始化器)在V中   与E相称。
    •   
    • 或者V是一个与之相称的ElementValue   吨。
    •   
  •   
  • V的类型与T分配兼容(§5.2),   此外:   
        
    • 如果T是基本类型或String,则V是常量   表达式(§15.28)。
    •   
    • V不为空。
    •   
    • 如果T是Class,或者是Class的调用,而V是类文字(第15.8.2节)。
    •   
    • 如果T是枚举类型,则为V.   是一个枚举常量。
    •   
  •   
     

如果元素类型是,则是编译时错误   与ElementValue不相称。