Spring Data Validator必须是多实例吗?

问题描述 投票:0回答:1

我的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扩展的接口。

java spring dependency-injection spring-data-jpa spring-validator
1个回答
0
投票

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

  1. 我希望上面的答案也能解决这个问题!如果没有那么请评论这个答案,我会试一试。
© www.soinside.com 2019 - 2024. All rights reserved.