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

一、前言

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

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

二、内容

2.1 概述

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

2.2 byName自动装配

(1)编写 Bean

首先,创建两个JavaBean类:UserServiceUserDao

(2)配置 Bean

接着,在Spring的XML配置文件中,配置UserServiceUserDao的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 进行自动装配。我们仍然使用上面的UserDaoUserService类。

(2)配置 Bean

下面来配置UserServiceUserDao的Bean:

下面测试一把:

这也是没问题的。

(3)注意事项

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

确实有。

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

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

看下面这个例子:

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

三、总结

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

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

相关推荐
IT_陈寒1 天前
JavaScript开发者必看:5个让你的代码性能翻倍的隐藏技巧
前端·人工智能·后端
shengjk11 天前
大数据工程师必看:为什么你的 IN 查询在 Flink/Spark 上慢到离谱?
后端
武子康1 天前
大数据-252 离线数仓 - Airflow + Crontab 入门实战:定时调度、DAG 编排与常见报错排查
大数据·后端·apache hive
程序员Terry1 天前
RocketMQ 使用指南
后端·rocketmq
AI茶水间管理员1 天前
OpenClaw 的 Token 消耗怎么计算?(附实操优化方案)
后端
星浩AI1 天前
现在最需要被 PUA 的,其实是 AI
人工智能·后端·github
程序员老赵1 天前
超全 Docker 镜像源配置指南|Windows/Mac/Linux一键搞定,拉镜像再也不卡顿
linux·后端·容器
JavaGuide1 天前
MiniMax M2.7 发布!Redis 故障排查 + 跨语言重构场景实测,表现如何?
redis·后端·ai·ai编程
架构师沉默1 天前
程序员真的要失业了吗?
java·后端·架构