Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring@Controller原型保持方法可见性的最佳实践_Java_Spring_Spring Mvc_Coding Style_Pmd - Fatal编程技术网

Java 使用Spring@Controller原型保持方法可见性的最佳实践

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

我当前工作中的项目对MVC控制器的方法使用私有访问修饰符:

@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


是否有任何理由将控制器的方法保持私有化?

你将其私有化,这是在攻击自己的脚:

  • PMD和IDE(以及它调用的所有其他私有方法)都认为它未使用。因此,您或同事可能会错误地删除实际使用的私有方法
  • 这使得单元测试变得更加困难
  • 这是非常规的,使您的代码在有经验的Spring开发人员看来很奇怪
  • 它们在逻辑上是公共的,因为它们由类和包之外的代码调用

  • 这不仅毫无意义(至少在我看来),而且还意味着它们没有被测试。Spring的部分价值(以及它以这种方式返回数据的能力)在于,您可以非常轻松地对控制器进行单元测试,而无需担心原始HTML解析(或其他难看的策略)。在保持控制器方法的私有性方面似乎没有任何价值。一般来说,测试私有方法需要反思,这是一种痛苦。如果您必须测试私有方法,您可以使用类似JMockit的util。我们使用带有HandlerAdapter和MockHttpServletRequest+MockHttpServletResponse的SpringJUnit4ClassRunner。因此,保持方法的私密性并不会使测试变得不可能)你将方法私密性化是在自食其果:1。PMD和IDE(以及它调用的所有其他私有方法)都认为它未使用。因此,您或同事可能会错误地删除实际使用的私有方法。2.这使得单元测试变得更加困难。3.这是非常规的,使您的代码在Spring开发人员看来很奇怪。4.它们在逻辑上是公共的,因为它们是由类和包之外的代码调用的。@jbnize您不介意将注释作为答案吗?我看到在私有@RequestMapping方法中,自动关联的依赖项是
    null
    ,当我将其公开时,依赖项是可用的。