【Spring】自动装配之根据名称(byName)和根据类型(byType)

一、前言

今天我们了解一下,Spring框架中的自动装配功能(自动化注入)。自动装配可以根据Bean的名字 进行自动装配,也可以根据类型进行自动装配。

本文将探讨Spring中两种自动装配方式:根据名称(byName)和根据类型(byType)。

二、内容

2.1 概述

Spring还可以完成自动化的注入,自动化注入又被称为自动装配。

2.2 byName自动装配

(1)编写 Bean

首先,创建两个JavaBean类:UserService和UserDao。

(2)配置 Bean

接着,在Spring的XML配置文件中,配置UserService和UserDao的Bean。

在之前,我们是使用这样进行配置的:

现在,我们可以在配置UserService时指定使用byName进行自动装配,如下所示:

这个 autowire 配置起到了关键作用:

  • 可以看到,我们在UserService Bean中需要添加autowire="byName",表示通过名称进行装配。

我们来看一些测试代码:

输出 "正在更新用户数据..." ,说明byName自动装配成功。

(3)注意事项

通过名称进行自动装配 的注意事项在于,需要注入的bean的id不能随便写。

也就是说,这里的 UserDao Bean 的 id 不能随便写:

xml 复制代码
<bean id="userDao" class="com.example.dao.UserDao"/>

由于UserService中类有一个UserDao属性,对应的set方法是setUserDao(),那么此时 UserDao Bean 的 id 就必须是 userDao。也就是setUserDao()的方法名去掉 set 后,将其余单词的首字母取小写后是 userDao。

并不是因为 UserService类有一个UserDao属性名为 userDao,所以将 UserDao Bean 的 id 设为 userDao。

举个例子,比如我们将UserService类中的UserDao属性名改为 uuu。

运行测试程序后可以发现,报错了:

因此,我们必须修改UserService类中 set 方法,将方法名改为 serUuu() 即可。

我们再来看效果:

再来看下面这个例子:

现在,我们就能理解根据名称进行装配(byName) ,其底层其实就是反射机制调用 set 方法进行注入。

2.3 byType自动装配

(1)编写 Bean

现在再来看一下使用 byType 进行自动装配。我们仍然使用上面的UserDao和UserService类。

(2)配置 Bean

下面来配置UserService和UserDao的Bean:

下面测试一把:

这也是没问题的。

(3)注意事项

那使用 byType 进行自动装配有什么注意事项嘛?

确实有。

首先,必须提供 set 方法。没错,无论是byName还是byType,在进行自动装配时都是基于set方法,因此不能省略 set 方法。

其次,如果使用 byType 进行自动装配时,配置文件中不能出现多个同类型的 bean 。

看下面这个例子:

因此,如果使用了 byType 进行自动装配,那么配置文件中不能有两个类型一样的 bean。

三、总结

总的来说,自动装配是Spring框架中一个功能,在某些情况下能够简化配置。

通过本文,我们了解了自动装配的使用方法,即根据名称(byName)和根据类型(byType)进行自动装配,以及一些注意事项(知道有这么回事,了解即可)。

相关推荐
鶴哥只手遮天5 分钟前
《rustc 内幕》第 1 章 全景:rustc 编译流水线与 crate 版图
后端·rust·开源
starzy199026 分钟前
深入理解Scala隐式值:编译期自动装配
开发语言·后端·scala
装不满的克莱因瓶2 小时前
设计模式之策略模式核心概念和应用场景
java·后端·设计模式·架构·系统架构·策略模式
特立独行的猫A9 小时前
用仓颉语言 cj-tauri 框架,五分钟给娃做了个鸿蒙形近字游戏
java·后端·python
码事漫谈11 小时前
我花了一周时间,看AI公司怎么"管"AI,结果越看越后背发凉
后端
爱学习的程序媛14 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
GISer_Jing14 小时前
Agent核心内容
后端·ai·langchain
budingxiaomoli15 小时前
Spring统一功能处理
java·后端·spring
某鹏16 小时前
网关选型:Go、Java、Graal 谁都不能完胜
后端
用户02478365309717 小时前
从屎山到防线:14 行状态迁移表,给任务系统装上防瞎跳闸门
后端