这个特性的其实还得归纳到@Autowired的特性上,或者说@Autowired包涵了一些我们不知道的能力。
@Autowired
private Map<String, BaseValidateCodeGenerator> baseValidateCodeGenerators;
在Spring中,写这种形式的代码,spring能自动装配值到map中,这种装配不是简单的给Map赋值,而是往Map里塞入元素,塞入规则需要看源码。我们平时可以适当利用这种特性来简化业务代码的编写。具体实现方式在DefaultListableBeanFactory#doResolveDependency()中。总结来说规则就是:
1、如果是数组,则获取数组元素类型,查找匹配该类型的所有bean,返回一个这些bean的数组;
2、如果该类可赋给Collection,并且是一个接口,则获取集合元素类型,查找匹配该类型的所有bean,返回一个这些bean的集合;
3、如果该类型是Map(注意是type == Map.class),且key是String类型,则获取Map的value的类型,查找匹配该类型的所有bean,这是一个key为bean name、value为bean实例的一个Map,返回这个Map。
4、其他情况则是我们所熟知的按类型自动装配过程。

Spring自动装配Map,List等集合相关推荐

  1. Spring按类型自动装配注入数组、集合、Map

    Spring按类型自动装配注入数组.集合.Map时,是把应用上下文中对应类型的bean装配进集合,而不是直接查找一个对应类型的集合然后注入.以下面这段代码为例: import org.springfr ...

  2. 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  3. 学习篇(一)- Spring自动装配的方式

    Spring自动装配的方式 1. 什么是自动装配? ​ 自动装配就是会通过Spring 的上下文为你找出相应依赖项的类,通俗的说就是Spring 会在上下文中自动查找,并自动给Bean装配与其相关的属 ...

  4. 第六篇 Spring 自动装配

    <Spring>篇章整体栏目 ----------------------------- [第一章]spring 概念与体系结构 [第二章]spring IoC 的工作原理 [第三章]sp ...

  5. Spring 自动装配 ‘byType’

    转载自   Spring 自动装配 'byType' Spring 自动装配 'byType' 这种模式由属性类型指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans ...

  6. Spring 自动装配 ‘byName’

    转载自  Spring 自动装配 'byName' Spring 自动装配 'byName' 这种模式由属性名称指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans 的 ...

  7. spring自动装配依赖包_解决Spring自动装配中的循环依赖

    spring自动装配依赖包 我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践. 使用Spring编写企业Web应用程序时,服务层中的服务量可能会增加. 服务层中的每个服务可能会消耗其他服 ...

  8. Java的注解机制——Spring自动装配的实现原理

    JDK1.5加入了对注解机制的支持,实际上我学习Java的时候就已经使用JDK1.6了,而且除了@Override和@SuppressWarnings(后者还是IDE给生成的--)之外没接触过其他的. ...

  9. Spring自动装配----注解装配----Spring自带的@Autowired注解

    Spring自动装配----注解装配----Spring自带的@Autowired注解 父类 package cn.ychx;public interface Person {public void ...

最新文章

  1. PointNet++:(1)网络完成的任务分析
  2. 获取手机当前显示的ViewController
  3. golang中的strings.EqualFold
  4. 在Visual Studio中调试samples中可能出现的错误
  5. 信号处理深度学习机器学习_机器学习与信号处理
  6. iOS开发  plist字段列表,很全
  7. anaconda创建新环境_【创建社会主义新农村】怀城街道:转变整治理念 农村人居环境换新颜...
  8. (转)Spring Boot 2 (二):Spring Boot 2 尝鲜-动态 Banner
  9. JS获取浏览器滚动条的宽度
  10. Oracle如何实现跨库查询
  11. Java 冒泡排序的使用
  12. 锦鱼课堂:跪着赚快钱,一年20W你愿意吗?
  13. 【延展Extension的使用场景 Objective-C语言】
  14. 破解rar、zip、7z压缩包加密
  15. IAR EW8051-8.1编译ZStack时,出现警告Warning[Pe069]: integer conversion resulted in truncation的解决办法
  16. 荣耀首批老机型今日下午 4 点开启鸿蒙 HarmonyOS 2 内测
  17. 都说程序员是吃青春饭的,28岁学编程还来得及吗?
  18. [产品经理]产品管理职位的级别
  19. SEO优化:6个方法提升网站排名
  20. 能把晦涩难懂的研究工作讲清楚,Distill就奖你10000美刀

热门文章

  1. 西邮Linux兴趣小组2021最终面试题
  2. 王佩丰数据透视表(一到五讲)
  3. 闭包相关面试题(非原创,整合网上资源)
  4. 廣州,深圳,北京生存之道
  5. (c/c++)REPEAT程序,prog文件,真正的做法
  6. LINUX数据库——修改数据库编码
  7. PHPMailer使用封装教程:为自己的PHP项目配置邮件功能
  8. php 跳转时传递post值,PHP重定向与POST数据
  9. nginx负载均衡前端项目
  10. 流量、入口优势凸显,百度成直播电商新蓝海