2014-01-29 52 views
0

我已經知道如何藉助AspectJ檢查整數範圍(請參閱下面的代碼)。AspectJ:字段範圍的動態計算

問題:但我該如何動態計算允許範圍?

代碼:

註釋:

@Target(ElementType.FIELD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Range { 
    int min(); 

    int max(); 
} 

驗證:

@Aspect 
public class Validation { 

    @Before("args(value) && @annotation(range)") 
    public void checkRange(Object value, Range range) throws ValidationException { 
     double number = ((Number) value).doubleValue(); 
     if (number < range.min() || number > range.max()) { 
      throw new ValidationException("Invalid data! Range constraint violated!"); 
     } 
    } 
} 

實體:

@Entity 
@Table(name = "my_entity") 
public class MyEntity { 


    @Range(min = 2, max = 10) // I WANT TO CALCULATE THESE RANGES DYNAMICALLY!!! 
    private int number; 
} 

回答

2

您不能動態設置註釋屬性的值;它們必須是編譯時常量,並被編譯到代碼中。您可能能夠使用CGLIB和運行時字節碼生成等工具來破解一些東西,但將驗證邏輯寫入類的方法可能會更好。