【问题标题】:Does Spring Data Validator has to be multi instance?Spring Data Validator 是否必须是多实例?
【发布时间】:2018-03-13 02:14:33
【问题描述】:

我的 Spring API 验证器有以下代码。

@Component
public class EventValidator implements Validator {

    @Autowired
    private EventRepository eventRepository;

    @Override
    public boolean supports(Class<?> clz) {
        return Event.class.equals(clz);
    }

    @Override
    public void validate(Object o, Errors errors) {
        ...
    }
}

我在控制器中使用 autowire 将此验证器添加到绑定中,如下所示:

@RestController
@RequestMapping("/events")
public class EventController {

    @Autowired
    private EventService eventService;

    @Autowired
    private EventValidator eventValidator;

    ...

    @InitBinder("event")
    protected void initBinder(WebDataBinder binder) {
        binder.addValidators(eventValidator);
    }

}

这是正确的吗?我问的原因是我在网上看到很多示例实际上是通过新实例添加验证器,例如

@InitBinder("event")
protected void initBinder(WebDataBinder binder) {
    binder.addValidators(new EventValidator());
}

我的问题是:

1) 我可以使用自动装配方式吗?如果没有,我为什么要获取一个新实例?

2) 如果我们必须创建一个新实例,如何在其中自动装配我的存储库接口以进行验证?我的存储库是从 Spring Data JPA 扩展的接口。

【问题讨论】:

  • 为什么验证器需要了解 HTTP 请求?

标签: java spring dependency-injection spring-data-jpa spring-validator


【解决方案1】:


1.如果你参考this,你会发现addValidators()方法接受一个验证器数组并调用assertValidators()方法执行NULL检查和IllegalState异常检查。之后,在列表类型的 FINAL 字段验证器中添加该验证器数组。
所以,回答你的第一个问题是自动装配应该在这里工作。因为每次都创建新对象在这里没有任何意义。

  1. 我希望上面的答案也能解决这个问题!如果没有,请评论这个答案,我会试一试。

【讨论】:

    猜你喜欢
    • 2019-03-21
    • 2012-05-04
    • 2014-02-03
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多