AspectJ:场范围的动态计算

时间:2014-01-29 10:06:39

标签: java aop 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;
}

1 个答案:

答案 0 :(得分:2)

您无法动态设置注释属性的值;它们必须是编译时常量并且内置于代码中。您可能能够使用诸如CGLIB和运行时字节码生成之类的工具来破解某些东西,但是您可能最好只将验证逻辑写入类的方法中。