@Autowired 在同一控制器的其他方法中无法在一个控制器中正常工作

Jah*_*rov -1 java spring autowired spring-restcontroller

当我将新的 @RequestMapping 方法添加到控制器时,@Autowired 突然停止工作。为什么我不明白。当我尝试使用这个新方法时,所有 @Autowired 接口都变为空。当我将其他 @RequestMapping 用于其他方法时,一切正常。

在此处输入图片说明

当我尝试使用新的@RequestMapping 时,第一张图片显示所有@Autowired 类为空。

在此处输入图片说明

这我使用其他@RequestMapping 都可以完美运行。这是 spring Rest Api 应用程序。我以前没有遇到过这些事情。什么可能是这样的应用程序。

Lin*_*ica 6

Spring 通过以下方式创建您的控制器:

  1. 创建实例
  2. 注入@Autowired依赖
  3. 用代理包装这个实例,代理处理注释,比如@PreAuthorizeor @Transactional,然后将调用委托给真实实例。

由于 Spring 使用的代理库 (CGLIB) 的性质,通常也是 Java 语言本身。只允许覆盖public方法。在查看您的示例时,这是有道理的。

您失败的方法用@PreAuthorizeand.... it is 注释private,意思是:它是在代理上调用的,并且代理没有注入的依赖项,因为通常它会委托给真实的实例。但是因为private方法,cglib和java做不到。

顺便说一句:查看屏幕截图时,您可以看到this两个调用中的变量不同。