问题描述
当我在控制器中添加新的@RequestMapping方法时,
@Autowired突然停止工作。为什么我不明白。当我尝试使用此新方法时,所有@Autowired接口都将变为null。当我在其他方法中使用其他@RequestMapping时,一切正常。
当我尝试使用新的@RequestMapping时,第一张图显示所有@Autowired类均为null。
我使用其他@RequestMapping的所有作品Perfectyl。这是Spring Rest Api应用程序。我以前从未遇到过这种事情。可能是这样的应用程序。
解决方法
Spring通过以下方式创建您的控制器:
- 创建实例
- 注入
@Autowired
依赖项 - 使用代理处理该实例,该代理处理注释,例如
@PreAuthorize
或@Transactional
,然后将调用委派给实际实例。
由于代理库的性质,Spring正在使用(CGLIB),通常也使用Java语言本身。仅允许覆盖public
方法。在查看您的示例时,这很有意义。
您失败的方法用@PreAuthorize
注释,并且....它是private
,表示:它是在代理上调用的,并且代理没有注入的依赖项,因为通常它将委托给实际实例。但是因为这是一个private
方法,所以cglib和Java不能做到这一点。
顺便说一句:查看屏幕快照时,您会发现两个调用中的
this
变量是不同的。