RequestMapping 适用于私有方法

问题描述 投票:0回答:3

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

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

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

java spring spring-mvc spring-boot spring-rest
3个回答
6
投票

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

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

此链接描述了一个有趣的情况,其中请求映射适用于包私有方法,但由于 AOP 仅适用于公共方法,因此结果是混乱和破坏。还有 4(四!) 个地方可以应用修复程序来防止非公共方法成为

@RequestMapping
的目标。

所以我将其归类为(小)错误。现在程序员要保持警惕并记住将这些方法公开。我会看看是否可以找到现有的错误通知单。


2
投票

正如JIRA ISSUE

中的pivotal所回应的那样

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


0
投票

多年后:

私有但带注释的方法的一个视角如下:

公共方法的返回值类型、参数类型(以及抛出的异常类型)也应该是公共的。如果您不希望参数和返回值是公共的(在 java 成员可见性意义上),私有方法是表达这一点的一种方式。

© www.soinside.com 2019 - 2024. All rights reserved.