【问题标题】:@Autowired dosn't work into one controller in other method of the same controller works fine@Autowired 在同一控制器的其他方法中无法在一个控制器中正常工作
【发布时间】:2020-09-03 06:05:46
【问题描述】:

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

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

我使用其他@RequestMapping 都可以完美地工作。这是 Spring Rest Api 应用程序。我以前没有遇到过这种事情。什么可能是这样的应用程序。

【问题讨论】:

  • 我可以从第一张图片中看到,它没有 @RestController 并且没有注入任何依赖项;都是空的。有吗?
  • @Adarsh 它是同一类

标签: java spring autowired spring-restcontroller


【解决方案1】:

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

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

由于 Spring 使用的代理库 (CGLIB) 的性质,通常还使用 java 语言本身。只允许覆盖public 方法。看看你的例子,这是有道理的。

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

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

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多