news 2026/8/26 20:40:54

Spring Bean自动装配(Autowiring)模式详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Bean自动装配(Autowiring)模式详解

Spring Bean自动装配(Autowiring)模式详解

一、核心概念:自动装配 vs 手动装配
装配方式核心区别配置方式(XML示例)
手动装配开发者显式指定每个依赖项的引用。使用<property>标签的refvalue属性。
自动装配Spring容器根据特定规则自动发现并注入Bean之间的依赖关系。<bean>标签上设置autowire属性,或在Java配置/注解中启用。

简单比喻:

  • 手动装配:像组装一台台式电脑,你需要自己购买并连接CPU、内存、硬盘等每一个部件。

  • 自动装配:像购买一台笔记本电脑,厂家已经根据标准配置,帮你把所有的硬件都组装好了。


二、XML配置中的四种自动装配模式

通过在Bean定义中设置autowire属性,可以指定以下四种自动装配策略:

模式autowire工作原理适用场景与注意事项
byNamebyNameSpring根据属性名在容器中查找同名(id/name)的Bean进行注入。依赖Bean的名称具有唯一性且与属性名一致时使用。简单直观。
byTypebyTypeSpring根据属性类型在容器中查找类型匹配的Bean进行注入。更常用。但当容器中存在多个同类型Bean时,会抛出NoUniqueBeanDefinitionException。此时需配合@Qualifier指定具体Bean。
constructorconstructor类似于byType,但应用于构造器参数。Spring会寻找与构造器参数类型匹配的Bean进行注入。用于构造器注入。同样需注意多个同类型Bean的歧义问题。
autodetect(已弃用)autodetect先尝试constructor模式,如果失败则回退到byType模式。早期Spring版本中用于自动选择注入方式,Spring 3.0 后已弃用,推荐使用注解驱动。

XML配置示例:

<bean id="customer" class="com.example.Customer" autowire="byType"/> <!-- Spring会自动寻找类型为 Person 的Bean,注入到customer的person属性中 -->

三、现代Spring开发:注解驱动的自动装配

在基于Java配置和注解的现代Spring开发中,自动装配主要通过以下注解实现,它比XML的autowire属性更强大、更精确。

注解作用位置核心功能等效XML配置
@Autowired(Spring)字段、Setter方法、构造器按类型自动装配。是Spring原生的注解。autowire="byType"autowire="constructor"
@Inject(JSR-330)字段、Setter方法、构造器按类型自动装配。是Java标准(JSR-330)注解,功能与@Autowired几乎相同。@Autowired
@Resource(JSR-250)字段、Setter方法默认按名称装配。如果未指定名称,则退而按类型装配。autowire="byName"

关键特性与组合使用:

  1. @Primary:当存在多个同类型候选Bean时,标记为首选Bean,解决byType的歧义问题。

  2. @Qualifier:与@Autowired配合使用,在按类型匹配的基础上,进一步按Bean的名称(限定符)进行筛选,精确指定要注入的Bean。

    @Autowired @Qualifier("mainDataSource") // 指定注入名为`mainDataSource`的DataSource private DataSource dataSource;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 11:50:07

需求接口人与研发接口人的职责分别是什么

需求接口人与研发接口人是连接“业务价值”与“技术实现”的两个核心枢纽。需求接口人&#xff08;通常是产品经理或业务分析师&#xff09;的核心职责是“定义”&#xff0c;即明确“做什么”和“为什么做”&#xff0c;他们对业务价值、需求优先级和用户体验负责。研发接口人…

作者头像 李华
网站建设 2026/8/24 23:09:08

基于大数据的短视频用户兴趣分析的设计与实现(程序+文档+讲解)

课题介绍在短视频平台精细化运营、个性化推荐需求下&#xff0c;传统用户兴趣分析存在 “维度单一、实时性差、精准度不足” 的痛点&#xff0c;基于大数据技术构建的短视频用户兴趣分析体系&#xff0c;整合用户行为数据、内容交互数据、环境数据等多源信息&#xff0c;实现用…

作者头像 李华
网站建设 2026/8/21 20:06:09

【最新2023】各省地区生产总值GDP 人均生产总值(人均GDP) 地区生产总值指数的 省级省份

【最新2023】各省地区生产总值GDP 人均生产总值(人均GDP) 地区生产总值指数的 省级省份 时间范围1999-2023年 人均生产总值指数(人均GDP指数) 包括一下: 人均生产总值(人均GDP) 各省地区生产总值GDP 人均生产总值指数(人均GDP指数) 地区生产总值指数 见图 说明:人均生产总值指…

作者头像 李华
网站建设 2026/8/25 14:48:27

医疗自动标注漏医生隐写症状 后来补NLP规则引擎才救回诊断准确率

&#x1f4dd; 博客主页&#xff1a;jaxzheng的CSDN主页 目录医疗数据科学&#xff1a;当Excel遇上心电图&#xff0c;我差点把医院整崩溃了 一、为什么说我是"数据界的急诊科医生" 二、那些年我在医疗数据里踩过的坑 三、那些让人拍案叫绝的医疗数据应用 四、给想入…

作者头像 李华
网站建设 2026/8/21 17:10:02

C 语言字符串函数超全解析

对于刚接触 C 语言的小伙伴来说&#xff0c;字符串函数就像 “字符处理的万能工具”&#xff0c;但用不好也容易踩坑。这篇内容会从 “核心逻辑→常用函数→避坑指南” 一步步讲&#xff0c;先懂底层、再学用法、最后避坑&#xff0c;保证通俗易懂&#xff5e; 一、先搞懂&…

作者头像 李华
网站建设 2026/8/24 5:39:04

海外仓签收入库环节怎么优化?海外仓入库流程优化方案(附TOPWMS实操)

在海外仓一件代发业务中&#xff0c;海外仓入库环节常被低估&#xff0c;但入库的问题直接影响到后续仓库的一系列操作。货物堆堵、SKU混乱、错发追责等入库乱象&#xff0c;并非单纯的管理疏忽&#xff0c;其根源在于缺乏一套系统化、标准化的流程管控体系。今天将根据我们的东…

作者头像 李华