• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解 Spring注解的(List&Map)特殊注入功能

    详解 Spring注解的(ListMap)特殊注入功能

    最近接手一个新项目,已经没有原开发人员维护了。项目框架是基于spring boot进行开发。其中有两处Spring的注解花费了大量的时间才弄明白到底是怎么用的,这也涉及到spring注解的一个特殊的注入功能。

    首先,看到代码中有直接注入一个List和一个Map的。示例代码如下:

    @Autowired
    private ListDemoService> demoServices;
    
    @Autowired
    private MapString,DemoService> demoServiceMap;
    
    

    以上是两处代码示例化之后的demo。当时看到这里之后有些懵,全局搜索之后并没有发现定义一个List和Map的对象。然而debug运行之后却发现它们的确都有值。这个事情就有些神奇了。在网上搜索也收获甚微。

    最后在调试List的时候突然灵感一闪,如果只有一个对象那么List里面的值不就只有一个吗。于是开始测试验证,结果发现的确如此。当实例化一个DemoService之后,另外一个类采用泛型注入List,Spring竟然成功的将实例化的对象放入List之中。思路打开之后,针对Map的就更好说了。Spring会将service的名字作为key,对象作为value封装进入Map。

    具体事例代码如下

    DemoService代码:

    package com.secbro.learn.service;
    
    import org.springframework.stereotype.Service;
    
    /**
     * Created by zhuzs on 2017/5/8.
     */
    @Service
    public class DemoService {
    
      public void test(){
        System.out.println("我被调用了");
      }
    
    }
    
    

    DemoController代码:

    package com.secbro.learn.controller;
    
    import com.secbro.learn.service.DemoService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.util.List;
    import java.util.Map;
    
    /**
     * Created by zhuzs on 2017/5/8.
     */
    @Controller
    @RequestMapping(value = "/demo")
    public class DemoController {
    
      @Autowired
      private ListDemoService> demoServices;
    
      @Autowired
      private MapString,DemoService> demoServiceMap;
    
      @ResponseBody
      @RequestMapping(value = "/test")
      public String test(){
        for(Map.EntryString,DemoService> entry : demoServiceMap.entrySet()){
          entry.getValue().test();
        }
        System.out.println("===============分割线=============");
        for(DemoService demoService : demoServices){
          demoService.test();
        }
    
        return "success";
      }
    }
    
    

    运行之后,访问http://localhost:8080/demo/test 执行结果如下:

    我被调用了
    ===============分割线=============
    我被调用了

    原来,在不知不觉中Spring已经帮我们做了很多事情,只是我们不知道而已。

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    您可能感兴趣的文章:
    • spring通过构造函数注入实现方法分析
    • 详解Spring 两种注入的方式(Set和构造)实例
    • Spring不能注入Static变量的原因及Spring注入静态变量
    • 详解Java Spring各种依赖注入注解的区别
    • Spring 依赖注入的几种方式详解
    • spring boot 注入 property的三种方式(推荐)
    • 详解Spring中bean的几种注入方式
    • 详析Spring中依赖注入的三种方式
    • spring boot静态变量注入配置文件详解
    • 详解Spring @Autowired 注入小技巧
    • 详解SpringBoot中实现依赖注入功能
    • Spring框架构造注入操作实战案例
    上一篇:WebService传XML 简单实例
    下一篇:详解velocity模板使javaWeb的html+js实现模块化
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详解 Spring注解的(List&Map)特殊注入功能 详解,Spring,注解,的,List,