简体   繁体   English

如何在没有spring的情况下在javax验证ConstraintValidator中注入bean

[英]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.

相关问题 如何解决 javax.validation.ValidationException: HV000064: Unable to instanceiate ConstraintValidator: in Spring - How do get around a javax.validation.ValidationException: HV000064: Unable to instantiate ConstraintValidator: in Spring 使用Spring ConstraintValidator进行枚举的javax.validation.UnexpectedTypeException - javax.validation.UnexpectedTypeException using Spring ConstraintValidator for an enumeration Spring-Boot 如何正确注入 javax.validation.Validator - Spring-Boot How to properly inject javax.validation.Validator Jersey Inject Weld管理bean进入ConstraintValidator - Jersey Inject Weld managed bean into ConstraintValidator Spring Webflux是否支持Javax Bean验证? - Does spring webflux supports javax bean validation? 访问 javax.validation.ConstraintValidator 中的主要对象 - Accessing the main object in a javax.validation.ConstraintValidator 使用ConstraintValidator进行Spring DTO验证 - Spring DTO validation using ConstraintValidator 如何在没有注入列表的情况下直接获取Spring中最高排序的bean? - How to directly get highest ordered bean in Spring without inject list? 使用 ConstraintValidator 使用拖曳类型进行自定义 bean 验证 - Custom bean validation with tow types using ConstraintValidator 如何将Spring bean注入Exception - How to inject Spring bean into Exception
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM