有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在没有spring的javax验证约束验证器中注入bean

我使用javax验证。我不使用springframework。 我编写了我的特定注释和特定约束验证程序

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”方法中的值。 没有Springdi我能做到吗

我想得到这样的东西:

  ...
  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) 个答案

  1. # 1 楼答案

    我的解决方案(感谢posthttps://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) {
        }
    }