Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 使用springmvc的私有方法_Java_Spring Mvc - Fatal编程技术网

Java 使用springmvc的私有方法

Java 使用springmvc的私有方法,java,spring-mvc,Java,Spring Mvc,我的控制器中有两种方法: 公开的方法 私有方法 它们都有@requestMapping,并且都引用了一个全局变量(@autowrite)。问题是第一个方法变量有值,第二个方法变量为null 请帮帮我 /** * Both of these methods are accessible through the browser, * when i ask for query1 the flowService has value but * when

我的控制器中有两种方法:

  • 公开的方法
  • 私有方法
  • 它们都有
    @requestMapping
    ,并且都引用了一个全局变量(
    @autowrite
    )。问题是第一个方法变量有值,第二个方法变量为null

    请帮帮我

        /** 
          * Both of these methods are accessible through the browser, 
          * when i ask for query1 the flowService has value but  
          * when i ask for query2 the flowService is null. 
          * My spring version is 4.2.4 
          * Created by hanxiaofei on 2017/10/12. 
          */
       public class TestController {    
           @Autowired    
           private FlowService flowService;  
    
           @RequestMapping(value = {"/query1"})    
           @ResponseBody    
           public CommonListResult<WorkOrderMO> query1() {
            return flowService.queryWorkOrderList(1);    
           } 
    
           @RequestMapping(value = {"/query2"})
           @ResponseBody
        private CommonListResult<WorkOrderMO> query2() {
            return flowService.queryWorkOrderList(1);
        }
    }
    
    /**
    *这两种方法都可以通过浏览器访问,
    *当我要求查询1时,flowService有价值,但
    *当我请求查询2时,flowService为空。
    *我的spring版本是4.2.4
    *韩晓飞于2017年10月12日创作。
    */
    公共类TestController{
    @自动连线
    私人流动服务;
    @请求映射(值={“/query1”})
    @应答器
    公共CommonListResult查询1(){
    返回flowService.queryWorkOrderList(1);
    } 
    @请求映射(值={“/query2”})
    @应答器
    私有CommonListResult查询2(){
    返回flowService.queryWorkOrderList(1);
    }
    }
    
    使用
    @RequestMappings注释的控制器方法必须是公共的,才能正常工作。无论如何,没有理由将请求方法设置为私有的,因为您不应该自己从不同的组件调用控制器方法。

    如果您不想调用它,那么声明它有什么好处,由于私有性质,您不能从任何其他类调用它,也不能从其他类调用控制器方法,并且您不想从浏览器调用它,因为您将无法调用它

    那么,您如何测试
    flowService
    query2
    方法中是否为null,因为您不会从任何地方调用它


    但是,您的问题与此私有和公共控制器方法无关,这是另一回事,因为
    flowService
    是一个实例变量,如果
    query1
    方法能够访问它,那么
    query2
    也应该能够访问它。

    Spring MVC控制器适用于任何范围:
    public
    private
    protected
    或package private access modifier

    您可以使用此工作正常的示例控制器对其进行验证:

    @RestController
    public class TestController {
    
        @Autowired
        private FlowService flowService;
    
        @RequestMapping("/query1")
        public List<String> query1() {
            return flowService.queryWorkOrderList(1);
        }
    
        @RequestMapping("/query2")
        private List<String> query2() {
            return flowService.queryWorkOrderList(2);
        }
    
        @RequestMapping("/query3")
        protected List<String> query3() {
            return flowService.queryWorkOrderList(3);
        }
    
        @RequestMapping("/query4")
        List<String> query4() {
            return flowService.queryWorkOrderList(4);
        }
    }
    
    @RestController
    公共类测试控制器{
    @自动连线
    私人流动服务;
    @请求映射(“/query1”)
    公共列表查询1(){
    返回flowService.queryWorkOrderList(1);
    }
    @请求映射(“/query2”)
    私有列表查询2(){
    返回flowService.queryWorkOrderList(2);
    }
    @请求映射(“/query3”)
    受保护列表查询3(){
    返回flowService.queryWorkOrderList(3);
    }
    @请求映射(“/query4”)
    列表查询4(){
    返回flowService.queryWorkOrderList(4);
    }
    }
    
    我已经用Spring Framework
    4.3.11.RELEASE
    对它进行了测试,所以您发行的第一件事就是使用可用的最新版本


    也就是说,我不明白为什么有人想使用
    private
    controller方法
    public
    是最常用的,但不指定作用域会更短,并产生相同的结果(
    query4()
    ,在我的示例中).

    除非您发布示例代码,说明您所面临的问题,否则很难为您提供帮助。请向我们展示一些代码。您可以发布代码,并向我们展示您在哪一行获得空值。谢谢大家,我已经添加了一些代码。谢谢,但我不能像我的代码展示那样通过浏览器请求私有方法。方法确实会被调用,但在特殊的代理上,它没有@Autowired字段,因此您的结果。例如,这同样适用于使用
    @modeldattribute
    注释的私有方法
    @RequestMapping
    方法是公共的。所以不同的原因是java不是spring,我知道spring可以忽略private,但我不明白为什么当我请求query2方法时它是空的,它们都使用flowservice属性,属性属于同一个容器。我知道我应该使用公钥,但我想知道为什么在合法的情况下它是无效的@韩晓飞 我不是Spring专家,我不知道内部结构,所以我不知道这种细节级别。谢谢Antoniossss^谢谢你的回答,但我想知道为什么当我通过brower询问query2时flowservice是空的。唯一的区别是query1使用pulic,query2使用private。你能解释一些细节吗?谢谢Deleze,是的,private方法工作正常,但是private方法中引用的全局变量为空。就像我的代码中的flowservice一样。我已经更新了我的示例,并且对
    flowservice
    的引用正常。如果您仍然看到问题,请提供一个复制项目。