RequestMapping适用于私有方法

时间:2018-05-28 09:49:16

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

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

我之所以这么说是因为我注意到@RequestMapping也在私有方法上工作。为什么会这样?

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

2 个答案:

答案 0 :(得分:1)

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

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

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

所以我将其归类为(次要)错误。现在,程序员可以保持警惕并记住将这些方法公之于众。我会看看我是否可以找到现有的错误票。

答案 1 :(得分:0)

正如JIRA ISSUE

中的关键回应
  

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