Java Spring 框架技术从入门到放弃:Spring生态之Spring 注入数据集合,Spring集合注入的四大类型

Java Spring 框架技术从入门到放弃:Spring生态之Spring 注入数据集合学习笔记(重点标注版)

一、核心概念与生活案例

数据集合注入:将数组、List、Set、Map 等集合类型作为依赖注入到 Bean 中。
生活案例:餐厅管理系统中,服务员需要管理不同类型的订单(集合),厨房需要记录所有烹饪设备(Map)。

二、集合注入的四大类型

1. 数组注入(Array)

核心:注入固定顺序的同类型元素。
案例:餐厅的每日特价菜(数组):

<bean id="waiter" class="com.example.Waiter">
    <property name="dailySpecials">
        <array>
            <value>黑椒牛排</value>
            <value>海鲜意面</value>
        </array>
    </property>
</bean>

关键特性

  • 顺序敏感:元素按 XML 定义顺序排列。
  • 类型统一:数组元素必须为同一类型。

2. List 注入(有序集合)

核心:注入有序且允许重复的元素。
案例:餐厅的员工排班表(List):

@Service
public class Manager {
    @Autowired
    private List<Employee> schedule; // 重点:@Autowired 自动注入 List

    public void printSchedule() {
        schedule.forEach(Employee::work);
    }
}

最佳实践

  • 使用 @Autowired 直接注入 List,Spring 自动匹配所有符合条件的 Bean。
  • 通过 @Order 注解控制元素顺序。

3. Set 注入(无序集合)

核心:注入无序且唯一的元素。
案例:餐厅的烹饪设备(Set):

<bean id="kitchen" class="com.example.Kitchen">
    <property name="equipments">
        <set>
            <ref bean="oven"/>
            <ref bean="stove"/>
        </set>
    </property>
</bean>

特性对比

类型顺序性唯一性典型场景
List允许重复订单队列、任务列表
Set强制唯一设备集合、权限角色

4. Map 注入(键值对集合)

核心:注入键值对映射关系。
案例:餐厅的设备与供应商(Map):

@Service
public class Purchasing {
    @Autowired
    private Map<String, Supplier> equipmentSuppliers; // 重点:Map 注入

    public String getSupplier(String equipment) {
        return equipmentSuppliers.get(equipment).getName();
    }
}

关键特性

  • 键类型:支持 String、Class 等类型。
  • 值类型:可以是 Bean 或字面量。

三、高级注入方式

1. Properties 注入

核心:注入键值对配置,通常来自外部文件。
案例:餐厅的营业时间配置(jdbc.properties):

<context:property-placeholder location="classpath:business.properties"/>
<bean id="restaurant" class="com.example.Restaurant">
    <property name="openingHours" value="${business.hours}"/>
</bean>

2. SpEL 表达式注入

核心:通过 Spring 表达式语言动态生成集合。
案例:餐厅的促销活动时间(SpEL 生成日期范围):

@Value("#{T(java.time.LocalDate).now().plusDays(7)}")
private LocalDate promotionEnd;

四、最佳实践与避坑指南

  1. 构造器注入集合(推荐):

    @Service
    public class Chef {
        private final List<Recipe> recipes;
        
        @Autowired
        public Chef(List<Recipe> recipes) { // 重点:集合依赖通过构造器注入
            this.recipes = recipes;
        }
    }
    
  2. 避免空集合

    • 使用 @Nonnull 注解(Lombok)或 default-empty XML 属性。
    <util:list id="emptyMenu" default-value="无菜品"/>
    
  3. 类型安全检查

    • 使用泛型约束集合类型(如 Map<String, Equipment>)。
    • XML 中通过 <list element-type="com.example.Dish"> 指定元素类型。

五、典型应用场景

六、预习:集合注入进阶知识

  1. Spring Boot 自动配置

    • 使用 @ConfigurationProperties 绑定集合类型配置:
    @Configuration
    @ConfigurationProperties(prefix="restaurant.menu")
    public class MenuConfig {
        private List<String> dishes;
    }
    
  2. 与 MyBatis 集成

    • 通过 @MapperScan 注入多个 DAO 接口(集合形式)。
  3. 响应式编程

    • Spring WebFlux 中使用 Flux/Mono 处理流式集合。
  4. 云原生场景

    • Kubernetes 中通过 ConfigMap 注入集合类型配置。

总结:集合注入是 Spring 依赖管理的重要组成部分,掌握数组、List、Set、Map 的注入方式,能有效处理复杂业务场景。重点关注 @Autowired 对集合的自动匹配,以及 SpEL 和外部属性文件的灵活运用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值