【发布时间】:2016-11-19 13:13:32
【问题描述】:
我编写了一个自定义验证注释和一个 ConstraintValidator 实现,它使用 Spring 服务(并执行数据库查询):
public class MyValidator implements ConstraintValidator<MyValidationAnnotation, String> {
private final MyService service;
public MyValidator(MyService service) {
this.service = service;
}
@Override
public void initialize(MyValidationAnnotation constraintAnnotation) {}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return service.exists(value);
}
}
它是这样使用的:
public class MyEntity {
@Valid
List<Foo> list;
}
public class Foo {
@MyValidationAnnotation
String id;
}
这很好用,但是service.exists(value) 被list 中的每个项目调用,这是正确的,但可以/应该优化。
问题:
在验证MyEntity 的实例时,我想缓存 service.exists(value) 调用的结果。
我不想使用static HashMap<String, Boolean>,因为这会在整个应用程序生命周期内缓存结果。
是否可以访问某种约束验证上下文,该上下文仅在 此特定验证 运行时存在,因此我可以将缓存的结果放在那里?
或者你有其他解决方案吗?
提前致谢!
【问题讨论】:
标签: spring validation caching spring-boot bean-validation