как внедрить бин в проверке javax ConstraintValidator без пружины - PullRequest
0 голосов
/ 24 сентября 2018

Я использую валидацию javax.и я не использую Springframework.Я написал свою конкретную аннотацию и конкретный 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;
  }
}

, и мне нужно использовать какой-то внешний «сервис» для проверки значения в методе «isValid».Могу ли я сделать это без Springframework DI?

Я хотел бы получить что-то вроде этого:

  ...
  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; 
     }
  }

1 Ответ

0 голосов
/ 25 сентября 2018

Мое решение (спасибо за сообщение 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) {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...