[英]how inject bean in javax validation ConstraintValidator without spring
I use javax validation.我使用 javax 验证。 and I don't use springframework.而且我不使用springframework。 I wrote my specific annotation and specific ConstraintValidator我写了我的特定注释和特定的 ConstraintValidator
public class MyConstraintValidator implements ConstraintValidator<Myconstraints, String> {
@Override
public void initialize(...){
...
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
System.out.println("value=" + value + ", context=" + context);
return false;
}
}
and i need to use some outer 'service' for checking value in 'isValid' method.我需要使用一些外部“服务”来检查“isValid”方法中的值。 Could I do it without springframework DI ?我可以在没有 springframework DI 的情况下做到吗?
I would like get something like this:我想得到这样的东西:
...
MyService service;
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
System.out.println("value=" + value + ", context=" + context);
if (service.check(value)) {
return true;
} else {
return false;
}
}
My solution (thanks the post https://marcin-chwedczuk.github.io/hello-hibernate-validator for an idea ):我的解决方案(感谢帖子https://marcin-chwedczuk.github.io/hello-hibernate-validator的想法):
class MyService {
public String getProp(){
return "something";
}
}
class MyConstraintValidatorFactory implements ConstraintValidatorFactory {
private MyService service;
public MyConstraintValidatorFactory(MyService service) {
this.service = service;
}
@Override
public <T extends ConstraintValidator<?, ?>> T getInstance(Class<T> key) {
if (MyConstraintValidator.class.equals(key)) {
MyConstraintValidator validator = new MyConstraintValidator(this.service);
return (T) validator;
}
if (key.getPackage().getName().startsWith("javax.validation") ||
key.getPackage().getName().startsWith("org.hibernate.validator"))
{
try {
return key.newInstance();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
return null;
}
@Override
public void releaseInstance(ConstraintValidator<?, ?> instance) {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.