我已经使用 Rest 控制器创建了一个 Spring Boot 应用程序(用户 spring-boot-starter-parent V. 2.2.2.RELEASE),工作正常,现在我添加了一个依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
并在我的控制器类上添加了@Validated,以便验证其中的所有方法:
@RestController
@Validated
public class UserController {
@Autowired
private UserService userService;
@PostConstruct
public void init() {
System.out.println("test");
}
}
现在控制器方法在调用时开始抛出 NullPointerExceptions,因为 userService 为 null;我做了一个@PostConstruct 作为测试。显然,它是在具有正确自动装配字段的普通未增强 bean 上调用的。但是当通过 HTTP 调用控制器时,这个未增强的 bean 没有被调用,而是一个 UserController$$EnhancerBySpringCGLIB$$ 类的 bean,并且它的 userController 没有自动装配。我真的不知道为什么这应该很简单,据我所知没有太多配置。所以我猜出于某种原因,spring 不会将依赖项注入到 CGLIB 增强类中,或者只是将其注入到错误的类中。当我删除@Validated 时,一切都再次正常工作,但当然没有验证。