栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当一个@Controller扩展另一个@Controller时,“发现歧义映射”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当一个@Controller扩展另一个@Controller时,“发现歧义映射”

(Sotirios Delimanolis的技巧提示可帮助我学习和理解这一点)

一个带

@Controller
注释的类不应扩展另一个带
@Controller
注释的类,因为父类的方法也存在于子类上。

每个

@Controller
带有注释的类都在Servlet上下文(?)中实例化为一个bean,然后
@RequestMapping
根据用户向Servlet请求时提供的映射,使用该类的实例(即该bean)来调用带注释的方法。

当您有两个带

@Controller
注释的类,一个是另一个的子类时,该子类将尝试第二次在父类上注册映射。“没什么大不了的!”
你说。问题在于,即使完全相同的方法,Spring也无法确定使用哪个 实例 来调用映射方法。

如果您注册两个相同类型/类的Bean,而这两个都尝试注册相同的映射,则会出现相同的问题。

Spring使用错误实例的方式有很多:

  1. 子级将覆盖父级的方法。它甚至不必重写映射方法,只需重写从映射方法调用的方法即可。子实例的行为与父实例的行为不同,因此它们不能具有相同的映射。
  2. 该类具有非静态字段。即使两个bean是同一类,这也适用。一个实例/ bean可以具有不同的值,因此由于实例字段的值而具有不同的行为。

由于这些问题(可能还有其他几个问题),即使映射到的方法是同一方法,Spring也无法忽略或解决重复映射。

在一个相关的问题中,我尝试通过制作带

@RequestMapping
注释的方法来解决此问题
static
。问题1仍然适用,因此仅使每种映射方法
static
都无法解决或解决该问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号