You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Spring所管理的javax ConstraintValidator实例?

问题:无需标注@Component即可获取Spring管理的自定义验证器

我们可以编写标准的javax.validation验证器,Spring会对其进行管理——哪怕不给验证器标注@Component,也能在里面做字段注入:

public class MyValidator implements ConstraintValidator<MyAnnotation, String> {

    @Autowired
    private MyBean bean;

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
       return bean.getValidElements().contains(value);
    }

}

但这里的MyValidator并不是Spring Bean:调用beanFactory.getBean(MyValidator.class)(或applicationContext.getBean(MyValidator.class))会抛出异常:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'my.package.MyValidator' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:351)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:342)

给MyValidator加上@Component注解能解决这个问题,但我希望能更简洁:我有多个继承自同一抽象类的验证器,本来打算给抽象类加注解让子类继承,但如果能不用标注组件,直接通过beanFactory.getBean(MyValidator.class)这种方式获取实例,每个验证器的代码会更简洁,也更易维护。

既然Spring已经在以某种方式管理这些验证器,有没有办法无需将它们标注为组件就能获取到这些验证器?

内容的提问来源于stack exchange,提问作者dcolazin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:30:01