news 2026/6/10 2:38:37

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/6/10 11:42:38

基于AI智能名片链动2+1模式S2B2C商城小程序的商户端微商平台构建研究

摘要&#xff1a;在数字化商业浪潮下&#xff0c;商户端微商面临激烈竞争&#xff0c;需构建全面且高效的平台体系。本文聚焦AI智能名片链动21模式S2B2C商城小程序在商户端微商平台构建中的应用&#xff0c;从技术、宣传、资源三个平台维度展开研究。通过分析该模式在各平台的作…

作者头像 李华
网站建设 2026/6/10 13:42:57

专注充电桩投资,招募城市合伙人 - 慧知开源充电桩平台

专注充电桩投资&#xff0c;招募城市合伙人 - 慧知开源充电桩平台 我们提供资本与战略&#xff0c;您负责落地与执行。本团队的核心业务是 投资建设充电桩&#xff0c;并作为您的投资人兼战略顾问&#xff1a;投入全部资金&#xff0c;并在选址、技术、资源等关键环节提供支持&…

作者头像 李华
网站建设 2026/6/10 11:34:24

Java毕设选题推荐:基于vue+协同过滤算法的动漫推荐系统热门动漫浏览、文章专栏阅读【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/9 19:46:53

两种常见开关中断方式对比

经常会遇到两种典型的中断禁用 / 启用实现&#xff1a;一种是基于纯汇编编写的Arch_IntSave/Arch_IntDisable函数&#xff0c;另一种是编译器内置的__enable_irq/__disable_irq内联函数&#xff0c;这两种的区别和功能具体拆解一下。一、核心实现与功能拆解1. 纯汇编实现&#…

作者头像 李华
网站建设 2026/6/10 11:56:36

城市仿真软件:CityEngine_(11).城市规划与设计实践

城市规划与设计实践 在上一节中&#xff0c;我们探讨了城市仿真软件的基本功能和应用场景。接下来&#xff0c;我们将深入到城市规划与设计的实践部分&#xff0c;通过具体的案例和代码示例&#xff0c;展示如何利用CityEngine进行城市模型的创建、编辑和仿真。本节将涵盖以下…

作者头像 李华
网站建设 2026/6/9 20:00:57

MySQL介绍

一、MySQL1. MySQL是什么&#xff1f;&#xff08;简单直白版&#xff09;想象一下&#xff0c;你开了一家超级棒的奶茶店&#xff0c;每天要记录&#xff1a;顾客点的奶茶口味顾客的联系方式每天的销售数据仓库里的原料库存如果用Excel表格记录&#xff0c;当数据量达到10万条…

作者头像 李华