深入理解Spring中的集合依赖注入

目录

[1. 创建一个配置类来定义Bean](#1. 创建一个配置类来定义Bean)

[2. 在组件中注入Bean](#2. 在组件中注入Bean)

构造方法注入

Setter方法注入

总结


如果集合仅仅是实体类的一个内部属性,并且与实体类的其他属性紧密相关,那么将其作为实体类的一个属性可能更加合适。

如果集合需要独立配置,那么将其作为一个独立的Spring Bean可能是更好的选择。这样做的主要好处是集中管理、易于配置和测试。这时Spring容器会负责它的生命周期管理。

以下是一个简单的例子来说明注入一个集合Bean:

1. 创建一个配置类来定义Bean

首先,我们可以创建一个配置类,其中定义一个要独立配置的集合,作为Bean交给Spring 容器管理。这个集合可以是一个简单的列表、映射或任何你希望独立配置的集合类型。

java 复制代码
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import java.util.ArrayList;  
import java.util.List;  
  
@Configuration  
public class SharedConfig {  
  
    @Bean  
    public List<String> sharedList() {  
        List<String> list = new ArrayList<>();  
        list.add("Item 1");  
        list.add("Item 2");  
        list.add("Item 3");  
        return list;  
    }  
}

2. 在组件中注入Bean

然后,我们可以在Spring组件中注入这个独立配置的集合Bean。

构造方法注入

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Component;  
import java.util.List;  
  
@Component  
public class ComponentA {  
  
    private final List<String> sharedList;  
  
    @Autowired  
    public ComponentA(List<String> sharedList) {  
        this.sharedList = sharedList;  
    }  
  
    public void doSomethingWithList() {  
        // 使用sharedList做一些事情  
    }  
}  

观察可以知道,以上例子是通过构造方法注入

Setter方法注入

除了构造方法注入之外,Spring还提供了其他依赖注入的方式,比如Setter方法注入

java 复制代码
@Component  
public class ComponentWithSetterInjection {  
  
    private List<String> sharedList;  
  
    @Autowired  
    public void setSharedList(List<String> sharedList) {  
        this.sharedList = sharedList;  
    }  
  
    public void useSharedList() {  
        // 使用sharedList  
    }  
}

总结

每种注入方式都有其适用的场景和优缺点。

构造方法注入通常用于确保依赖项在对象创建时就被设置,并且是不可变的。

Setter方法注入则提供了更大的灵活性,可以在对象创建后动态地改变依赖项的值。

相关推荐
程序猿_极客6 分钟前
【2026】Spring IOC 与 DI 依赖注入深度解析:从原理到实战(附带面试高频问题)
java·后端·spring·ioc·di依赖注入
小信丶8 分钟前
BlockExceptionHandler类介绍、应用场景和示例代码
java·spring boot·后端·spring·spring cloud
若鱼19191 小时前
SpringBoot4.0新特性-Resilience之并发限制
java·spring
雨中飘荡的记忆2 小时前
Spring AI + MCP:从入门到实战
java·人工智能·spring
CodeToGym2 小时前
【Spring全家桶】Spring Cache 深度解析:一行注解实现缓存自动化
spring·缓存·自动化
崎岖Qiu2 小时前
SpringBoot:基于注解 @PostConstruct 和 ApplicationRunner 进行初始化的区别
java·spring boot·后端·spring·javaee
人道领域3 小时前
javaWeb从入门到进阶(SpringBoot基础案例)
java·开发语言·spring
草履虫建模3 小时前
A02 Maven 基础配置:本地仓库、镜像、项目编码与常见问题(IDEA 实战)
xml·java·spring boot·spring·maven·intellij-idea·idea
sww_10263 小时前
Spring-AI MCP 源码浅析
java·人工智能·spring
没有bug.的程序员3 小时前
Spring Boot 性能优化:启动时间从 5s 到 1s 的全链路实战指南
java·spring boot·后端·spring·性能优化·全链路·启动时间