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

发布时间 - 2026-01-11 01:04:06    点击率:

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

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

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

@Autowired
private List<DemoService> demoServices;

@Autowired
private Map<String,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 List<DemoService> demoServices;

  @Autowired
  private Map<String,DemoService> demoServiceMap;

  @ResponseBody
  @RequestMapping(value = "/test")
  public String test(){
    for(Map.Entry<String,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注解的(List&Map)特殊注入功能  # Spring  # 注解  # List&Map注解  # springboot从application.properties中注入list  #  map方式  # springboot注入yml配置文件 list报错的解决方案  # 详解Spring注入集合(数组、List、Map、Set)类型属性  # Spring 配置文件字段注入到List、Map  # spring中的注入list集合  # 只有一个  # 两处  # 分割线  # 都有  # 是怎么  # 中有  # 的确如此  # 这也  # 希望能  # 不就  # 另外一个  # 就更  # 涉及到  # 谢谢大家  # 会将  # 开发人员  # 后却  # 在网上  # 其中有  # 是基于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 开心动漫网站制作软件下载,十分开心动画为何停播?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  如何在建站之星绑定自定义域名?  如何快速完成中国万网建站详细流程?  什么是javascript作用域_全局和局部作用域有什么区别?  Python并发异常传播_错误处理解析【教程】  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  MySQL查询结果复制到新表的方法(更新、插入)  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  高防服务器租用指南:配置选择与快速部署攻略  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  大连 网站制作,大连天途有线官网?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  详解jQuery停止动画——stop()方法的使用  如何快速重置建站主机并恢复默认配置?  Laravel如何使用Service Container和依赖注入?(代码示例)  如何在VPS电脑上快速搭建网站?  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  javascript日期怎么处理_如何格式化输出  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  使用Dockerfile构建java web环境  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  网站建设整体流程解析,建站其实很容易!  昵图网官方站入口 昵图网素材图库官网入口  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel如何配置和使用缓存?(Redis代码示例)  在线教育网站制作平台,山西立德教育官网?  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  网站建设保证美观性,需要考虑的几点问题!  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  手机网站制作与建设方案,手机网站如何建设?  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  制作旅游网站html,怎样注册旅游网站?  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  教学论文网站制作软件有哪些,写论文用什么软件 ?  Python结构化数据采集_字段抽取解析【教程】  Android 常见的图片加载框架详细介绍  jQuery 常见小例汇总  微信推文制作网站有哪些,怎么做微信推文,急?  如何撰写建站申请书?关键要点有哪些?  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  如何在云虚拟主机上快速搭建个人网站?