【问题标题】:RequestMapping works on private methodsRequestMapping 适用于私有方法
【发布时间】:2018-11-06 21:06:20
【问题描述】:

现在,总的来说,我的理解是 @RequestMapping 方法需要公开。他们也可以是私人的吗?如果是这样,我们什么时候使用它?

我问这个的原因是我注意到@RequestMapping 也适用于私有方法。为什么会这样?

是不是因为 spring 通过反射访问这些方法,所以没有真正考虑访问修饰符?这是一个错误还是一个有用的功能?

【问题讨论】:

标签: java spring spring-mvc spring-boot spring-rest


【解决方案1】:

现在真正的原因(如果存在的话)很难在不进入 Spring 开发人员的头脑的情况下说出,因为这是很久以前实现的。

我猜这是一个疏忽,因为使用私有方法作为请求映射的目标并没有显着优势。当然,您不能再从其他代码中调用它们,但是如果您从代码中调用控制器方法,那么您应该遇到所有问题。

This link 描述了一个有趣的情况,请求映射适用于包私有方法,但由于 AOP 仅适用于公共方法,结果是混乱和破坏。还给出了 4 个(四个!)可以应用修复程序的地方,以防止非公共方法成为 @RequestMapping 的目标。

所以我会将其归类为(次要)错误。现在由程序员保持警惕并记住将这些方法公开。我会看看能不能找到一个现有的 bug 票。

【讨论】:

    【解决方案2】:

    正如关键在JIRA ISSUE 中回复的那样

    这确实按设计工作。我们通常不限制反射方法的可见性声明,将选择权留给开发人员。也就是说,对于这种特殊情况,我会推荐公共声明或潜在的包可见声明(没有可见性关键字),而私有处理程序方法实际上在这里更像是一种利基效应。

    【讨论】:

      猜你喜欢
      • 2013-03-30
      • 2011-05-22
      • 1970-01-01
      • 2014-01-21
      • 2013-03-30
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多