@Autowired不能在同一个控制器的其他方法中工作于一个控制器

问题描述

当我在控制器中添加新的@RequestMapping方法时,

@Autowired突然停止工作。为什么我不明白。当我尝试使用此新方法时,所有@Autowired接口都将变为null。当我在其他方法中使用其他@RequestMapping时,一切正常。

enter image description here

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

enter image description here

我使用其他@RequestMapping的所有作品Perfectyl。这是Spring Rest Api应用程序。我以前从未遇到过这种事情。可能是这样的应用程序。

解决方法

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

  1. 创建实例
  2. 注入@Autowired依赖项
  3. 使用代理处理该实例,该代理处理注释,例如@PreAuthorize@Transactional,然后将调用委派给实际实例。

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

您失败的方法用@PreAuthorize注释,并且....它是private,表示:它是在代理上调用的,并且代理没有注入的依赖项,因为通常它将委托给实际实例。但是因为这是一个private方法,所以cglib和Java不能做到这一点。

顺便说一句:查看屏幕快照时,您会发现两个调用中的this变量是不同的。