我已经知道如何在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;
}
答案 0 :(得分:2)
您无法动态设置注释属性的值;它们必须是编译时常量并且内置于代码中。您可能能够使用诸如CGLIB和运行时字节码生成之类的工具来破解某些东西,但是您可能最好只将验证逻辑写入类的方法中。