Spring的接口集合注入功能

对于Spring中已经注入的bean, 可以使用Autowired, 通过Map<String, BeanInterface>List<BeanInterface>的方式直接注入

实现步骤

  1. 定义一个接口
  2. 实现这个接口的一系列类, 都加上 @Component 或者 @Service 注解, 使其成为 spring bean
  3. 在其他类中, 通过 @Autowired private Map<String, InterfaceName> interfaceMap;@Autowired private List<InterfaceName> interfaceList;可以得到上面定义的类的bean映射或列表
    • 对于Map, Spring会将实例化的bean放入value, key则为bean的名称
    • 对于List,列表就是实例化的bean
  4. 如果要控制list中的顺序, 在实现类中加入@Order(value) 注解, 值越小越先被初始化越先被放入List

验证

先定义一个接口

public interface GenericService {
void breath();
}

然后定义接口的实现类

// Dog.java
@Service("dog-control")
public class Dog implements GenericService {
@Override
public void breath() {
System.out.println("dog breath");
}
} //Cat.java
@Component
public class Cat implements GenericService {
@Override
public void breath() {
System.out.println("cat breath");
}
}

在Demo类中引用

@Component
public class Demo { @Autowired
private Map<String,GenericService> GenericServiceMap; @Autowired
private List<GenericService> GenericServiceList; public void dogBreath() {
this.GenericServiceMap.get("dog-control").breath();
} public void firstBreath() {
this.GenericServiceList.get(0).breath();
}
}

测试用例

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationTests { @Autowired
private com.service.Demo demo; @Test
public void testMap(){
demo.dogBreath();
} @Test
public void testList(){
demo.firstBreath();
}
}

Spring的接口集合注入功能的更多相关文章

  1. 采用dom4j和反射模拟Spring框架的依赖注入功能

    Spring的依赖注入是指将对象的创建权交给Spring框架,将对象所依赖的属性注入进来的行为.在学习了dom4j后,其实也可以利用dom4j和反射做一个小Demo模拟Spring框架的这种功能.下面 ...

  2. Spring配置文件解析--集合注入方法

    <bean id="moreComplexObject" class="example.ComplexObject"> <property n ...

  3. Spring再接触 集合注入

    beans.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="htt ...

  4. 关于Spring IOC (DI-依赖注入)需要知道的一切

    关联文章: 关于Spring IOC (DI-依赖注入)你需要知道的一切 关于 Spring AOP (AspectJ) 你该知晓的一切 <Spring入门经典>这本书无论对于初学者或者有 ...

  5. 关于Spring IOC (DI-依赖注入)

    <Spring入门经典>这本书无论对于初学者或者有经验的工程师还是很值一看的,最近花了点时间回顾了Spring的内容,在此顺带记录一下,本篇主要与spring IOC相关 ,这篇博文适合初 ...

  6. 关于Spring IOC (DI-依赖注入)你需要知道的一切

    <Spring入门经典>这本书无论对于初学者或者有经验的工程师还是很值一看的,最近花了点时间回顾了Spring的内容,在此顺带记录一下,本篇主要与spring IOC相关 ,这篇博文适合初 ...

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

    一.先看一个示例演示:spring注解的一个特殊的注入功能. 首先,是定义一个接口,3个实现类. public interface GreetService { public String sayHe ...

  8. 没想到吧,Spring中还有一招集合注入的写法

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. Spring作为项目中不可缺少的底层框架,提供的最基础的功能就是bean的管理了.bean的注入相信大家都比较熟 ...

  9. 由一个RABBITMQ监听器死循环引出的SPRING中BEAN和MAPPER接口的注入问题

    1 @Slf4j 2 @RestController 3 @Component 4 public class VouchersReceiverController implements Message ...

  10. Spring集合注入

    1.集合注入 上一篇博客讲了spring得属性注入,通过value属性来配置基本数据类型,通过<property>标签的 ref 属性来配置对象的引用.如果想注入多个数据,那我们就要用到集 ...

随机推荐

  1. 用C# WPF简单实现仪表控件

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  2. java - for循环 排序数组 - 求数组最小值

    主要是利用静态变量存储 public class Bubble2 { static int minNumber; public static void main(String[] args) { in ...

  3. C++17 解构绑定

    在python中,加入我们有一个函数返回了两个数值,如: def getData(x, y): return x,y 那么我们在使用这个函数时只需要使用两个新变量去接收函数返回值就可以: a,b = ...

  4. 一种基于linux系统的精准流量统计方法

    ​ 前言: 在linux系统关于流量统计,已经有开源的工具,比如nethogs,nload和iptraf.它们适合我们在PC上直接监控某台设备的流量情况,但并不适合我们应用到自己的程序中去. 如果要在 ...

  5. Java中有哪些方式能实现锁某个变量

    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 在Java中,有几种方式可以实现对某个变量的锁定 ...

  6. KVM命令行Clone虚拟机的快速处理

    KVM命令行Clone虚拟机的快速处理 背景 鲲鹏+银河麒麟的测试环境 想着可以使用 KVM的方式创建虚拟机 virt-manager 有个clone虚拟机的提示, 但是发现没有创建新存储卷下面的磁盘 ...

  7. [转帖]badboy与jmeter的结合使用

    https://blog.csdn.net/weixin_41754309/article/details/107106855 欢迎关注[无量测试之道]公众号,回复[领取资源], Python编程学习 ...

  8. [转帖]Python模块winRM

    https://www.jianshu.com/p/ac095497bad4 一.介绍 winRM服务是windows server下PowerShell的远程管理服务.Python脚本通过连接win ...

  9. 【转贴】西数全新推出企业级金盘SSD:2.5寸U.2接口、最大7.68TB、96层TLC

    西数全新推出企业级金盘SSD:2.5寸U.2接口.最大7.68TB.96层TLC https://www.cnbeta.com/articles/tech/951353.htm 硬件发展日新月异 &q ...

  10. [官方]Beyond Compare里面 二进制比较的含义.

    Content Comparisons Actions > Compare Contents In the Actions menu, the Compare Contents command ...