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

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

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

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

java 复制代码
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 类型进行注入:

java 复制代码
@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 类型:

java 复制代码
@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 或其他适当的注解确保它们被扫描到。

相关推荐
Goldn.1 天前
Java核心技术栈全景解析:从Web开发到AI融合
java· spring boot· 微服务· ai· jvm· maven· hibernate
李慕婉学姐1 天前
【开题答辩过程】以《基于Android的出租车运行监测系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·后端·vue
m0_740043731 天前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
编织幻境的妖1 天前
SQL查询连续登录用户方法详解
java·数据库·sql
未若君雅裁1 天前
JVM面试篇总结
java·jvm·面试
kk哥88991 天前
C++ 对象 核心介绍
java·jvm·c++
招风的黑耳1 天前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端
xunyan62341 天前
面向对象(下)-接口的理解
java·开发语言
大佐不会说日语~1 天前
Spring AI Alibaba 的 ChatClient 工具注册与 Function Calling 实践
人工智能·spring boot·python·spring·封装·spring ai
程序员游老板1 天前
基于SpringBoot3+vue3的爱心陪诊平台
java·spring boot·毕业设计·软件工程·课程设计·信息与通信