Java 使用Spring@Controller原型保持方法可见性的最佳实践
我当前工作中的项目对MVC控制器的方法使用私有访问修饰符:Java 使用Spring@Controller原型保持方法可见性的最佳实践,java,spring,spring-mvc,coding-style,pmd,Java,Spring,Spring Mvc,Coding Style,Pmd,我当前工作中的项目对MVC控制器的方法使用私有访问修饰符: @Controller public class HelloWorldController { @RequestMapping("/helloWorld") private ModelAndView helloWorld() { 我已经整合了PMD,他的报告有很多: /src/main/java/com/web/controller/SignalController.java:91: Avoid unused pri
@Controller
public class HelloWorldController {
@RequestMapping("/helloWorld")
private ModelAndView helloWorld() {
我已经整合了PMD,他的报告有很多:
/src/main/java/com/web/controller/SignalController.java:91: Avoid unused private
methods such as 'handleNewRequest()'.
因此,我认为与其禁用有用的PMD规则,不如将控制器的方法可见性更改为public
是否有任何理由将控制器的方法保持私有化?你将其私有化,这是在攻击自己的脚:
这不仅毫无意义(至少在我看来),而且还意味着它们没有被测试。Spring的部分价值(以及它以这种方式返回数据的能力)在于,您可以非常轻松地对控制器进行单元测试,而无需担心原始HTML解析(或其他难看的策略)。在保持控制器方法的私有性方面似乎没有任何价值。一般来说,测试私有方法需要反思,这是一种痛苦。如果您必须测试私有方法,您可以使用类似JMockit的util。我们使用带有HandlerAdapter和MockHttpServletRequest+MockHttpServletResponse的SpringJUnit4ClassRunner。因此,保持方法的私密性并不会使测试变得不可能)你将方法私密性化是在自食其果:1。PMD和IDE(以及它调用的所有其他私有方法)都认为它未使用。因此,您或同事可能会错误地删除实际使用的私有方法。2.这使得单元测试变得更加困难。3.这是非常规的,使您的代码在Spring开发人员看来很奇怪。4.它们在逻辑上是公共的,因为它们是由类和包之外的代码调用的。@jbnize您不介意将注释作为答案吗?我看到在私有@RequestMapping方法中,自动关联的依赖项是
null
,当我将其公开时,依赖项是可用的。