Spring List接口类型的自动注入
注入同一接口的所有实现类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;// 定义一个接口
interface MyService {void doSomething();
}// 接口实现类1
@Component
class ServiceA implements MyService {@Overridepublic void doSomething() {System.out.println("ServiceA doing something");}
}// 接口实现类2
@Component
class ServiceB implements MyService {@Overridepublic void doSomething() {System.out.println("ServiceB doing something");}
}// 使用List注入所有实现类
@Component
class ServiceProcessor {// 自动注入所有MyService接口的实现类@Autowiredprivate List<MyService> services;public void processAll() {// 遍历调用所有实现类的方法services.forEach(MyService::doSomething);}
}
Spring 实现自动注入的核心原理是:
- 容器启动时扫描并注册所有 Bean
- 当发现需要注入
List
类型时,容器会:- 查找所有匹配泛型类型的 Bean
- 收集这些 Bean 并放入
List
- 将组装好的
List
注入到目标对象中
这种方式特别适合需要批量处理同一接口的多个实现类的场景,如策略模式的实现