【Spring】Spring 可以将接口所实现的类都注入到接口类型的List、Map中

这篇具有很好参考价值的文章主要介绍了【Spring】Spring 可以将接口所实现的类都注入到接口类型的List、Map中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring 提供了依赖注入的功能,可以通过注解或者配置来实现将接口的实现类注入到接口类型的 List、Map 中。 @Autowired 是重点!除此之外,@RequiredArgsConstructor 也可以代替他的功能。参考【注解】@RequiredArgsConstructor 按需自动生成构造函数,举例说明

Spring自动扫描组件: 如果你的项目是一个Spring应用程序,并且使用了组件扫描,Spring容器会自动扫描并创建实现了 MyInterface 接口的类的实例,并将它们注册为Bean。然后,你可以使用@Autowired 或其他依赖注入方式,将这些Bean注入到 MyService 类中的 myInterfaceList 列表中。这样,你无需手动初始化,Spring会帮助你管理这些实现类的对象。

假设有以下接口和实现类:

public interface MyInterface {
    void doSomething();
}

@Service
public class MyServiceImpl1 implements MyInterface {
    @Override
    public void doSomething() {
        System.out.println("Implementation 1");
    }
}

@Service
public class MyServiceImpl2 implements MyInterface {
    @Override
    public void doSomething() {
        System.out.println("Implementation 2");
    }
}

1、List 注入:

你可以使用 @Autowired 注解结合 List 类型进行注入:

@Service
public class MyService {
    @Autowired
    private List<MyInterface> myInterfaceList;

    public void executeAll() {
        for (MyInterface myInterface : myInterfaceList) {
            myInterface.doSomething();
        }
    }
}

Spring 会自动将所有实现 MyInterface 接口的类注入到 myInterfaceList 中。

2、Map 注入:

如果想要将实现类按照名称注入到 Map 中,可以使用 Autowired 结合 Map 类型:

@Service
public class MyService {
    @Autowired
    private Map<String, MyInterface> myInterfaceMap;

    public void execute(String implementationName) {
        MyInterface myInterface = myInterfaceMap.get(implementationName);
        if (myInterface != null) {
            myInterface.doSomething();
        }
    }
}

在这种情况下,实现类的 Bean 名称会作为 Map 的键。

需要确保 Spring 上下文中存在实现接口的实例,可以通过 @Service 或其他适当的注解确保它们被扫描到。文章来源地址https://www.toymoban.com/news/detail-818215.html

到了这里,关于【Spring】Spring 可以将接口所实现的类都注入到接口类型的List、Map中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Scala的特质trait与java的interface接口的区别,以及Scala特质的自身类型和依赖注入

    Scala中的特质(trait)和Java中的接口(interface)在概念和使用上有一些区别: 默认实现:在Java中,接口只能定义方法的签名,而没有默认实现。而在Scala的特质中,除了可以定义方法签名外,还可以定义方法的具体实现。这样,在混入(mix in)特质的类中,可以直接使用特质

    2024年02月10日
    浏览(37)
  • SpringBoot使用@Autowired将实现类注入到List或者Map集合中

    最近看到 RuoYi-Vue-Plus 翻译功能 Translation 的翻译模块配置类 TranslationConfig ,其中有一个注入 TranslationInterface 翻译接口实现类的写法让我感到很新颖,但这种写法在Spring 3.0版本以后就已经支持注入 List 和 Map ,平时都没有注意到这一块,故此记录一下这种写法。 之前一般定义

    2024年02月14日
    浏览(41)
  • C++:将栈类和队列类都实现成模板类

    1.栈的源代码: 2.队列源代码 3.思维导图

    2024年02月07日
    浏览(35)
  • 【Turfjs的java版本JTS】前面讲了Turfjs可以实现几何计算,空间计算的功能,如果后端要做这项功能也有类似的类库,JTS

    JTS = Java Topology Suite 几何计算: 1. 前端js就用这个 Turfjs的类库。参考网站: 计算两线段相交点 | Turf.js中文网 2. 后端java语言就可以用 JTS这个类库,参考网站:  JTS参考网站: 1. https://github.com/locationtech/jts GitHub - locationtech/jts: The JTS Topology Suite is a Java library for creating and m

    2024年02月09日
    浏览(36)
  • java Spring Boot2.7写一个接口 提供图片预览 前端可以直接用接口地址当src为图片地址使用

    我们特别是在做小程序开发时 很多图片会比较大 而小程序本身就对自身大小要求非常高 所以 图片放在服务器上提供访问链接是一种非常好的选择 我想很多前端会误认为 直接将图片放在服务器上就可以了 但其实没那么简单 因为服务器其实也可以理解为一个电脑 你就想 你自

    2024年02月07日
    浏览(49)
  • 实现List接口的常用三类

    实现List接口的常用三类分别是ArrayList, vector, LinkedList,我们来看一下List接口的体系图: 这里我们可以查看类提供的相关方法,这里我们用代码实例来给大家演示一下常用的方法: 1.ArrayList 该方法在之前的博客中也写过相关实例但是这次我们要分析相关源码。 Vector,LinkedList方

    2024年02月04日
    浏览(41)
  • 在Java中如何给List进行排序?这7种方法都可以轻松实现!

    你好,这里是Java架构历程,每天一个Java知识,愿我们每个Java开发者早日成为Java架构师,加油! 在Java中我们经常需要对 ArrayList、LinkedList 或 CopyOnWriteArrayList 等列表进行排序,在Java8出现之前,排序虽然能够实现,但是代码写起来不是很优雅,而且性能上也没有什么优势。

    2024年02月08日
    浏览(45)
  • 使用 Spring 实现控制反转和依赖注入

    在本文中,我们将介绍 IoC (控制反转)和 DI (依赖注入)的概念,以及如何在 Spring 框架中实现它们。 控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给容器或框架。我们最常在面向对象编程的上下文中使用它。 与传统编程相比,传统编程中我

    2024年02月13日
    浏览(35)
  • 不允许指针指向不完整的类类型

    问题原因 1:没有包含对应结构体的头文件 解决办法 1:直接添加相对应的头文件 问题原因 2:对应的结构体定义写在了C/CPP文件里 解决办法 2:将结构体定义写在对应的头文件中

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包