I use javax validation. and I don't use springframework. I wrote my specific annotation and specific 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. Could I do it without 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 ):
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) {
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.