Java SpringBoot:@Validated和@PreDestroy创建名为';默认验证器';
我有一个Spring服务,它使用Java SpringBoot:@Validated和@PreDestroy创建名为';默认验证器';,java,spring,spring-boot,spring-validator,Java,Spring,Spring Boot,Spring Validator,我有一个Spring服务,它使用@PreDestroy方法调用另一个服务 @Service public class DestroyMe { public final ValidService service; private SomeDto dto; @PreDestroy public void destroy() { service.stop(dto); } } ValidService是一个带有@Validated类级注释的接口 @Validat
@PreDestroy
方法调用另一个服务
@Service
public class DestroyMe {
public final ValidService service;
private SomeDto dto;
@PreDestroy
public void destroy() {
service.stop(dto);
}
}
ValidService
是一个带有@Validated
类级注释的接口
@Validated
public interface ValidService {
public void stop(@Valid SomeDto dto);
}
还有这个接口的实现类(带有@Service
注释)
验证在运行时正常工作,但当SprinBoot应用程序终止时,它调用调用destroy
方法,该方法调用service.stop(dto)
,我得到以下错误:
创建名为“defaultValidator”的bean时出错:当此工厂的单例正在销毁时,不允许创建单例bean(不要在销毁方法实现中从BeanFactory请求bean!)
单击IDE中的defaultValidator
将我带入ValidationAutoConfiguration
类的公共静态LocalValidatoryFactoryBean defaultValidator()
如果我从ValidatedService
中删除@Validated
注释,所有操作都正常,但没有服务的输入验证。
看起来Spring正在尝试创建一个特别的验证器bean来验证stop
方法的输入,但是在销毁阶段不可能这样做
如何解决这个问题
编辑1
以下是重现此行为的代码: