【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)进行自动装配,以及一些注意事项(知道有这么回事,了解即可)。

相关推荐
Tony Bai42 分钟前
【Go 网络编程全解】12 本地高速公路:Unix 域套接字与网络设备信息
开发语言·网络·后端·golang·unix
Yeats_Liao2 小时前
Go Web 编程快速入门 06 - 响应 ResponseWriter:状态码与头部
开发语言·后端·golang
mit6.8242 小时前
[Agent可视化] 编排工作流(Go) | Temporal引擎 | DAG调度器 | ReAct模式实现
开发语言·后端·golang
猪哥-嵌入式3 小时前
Go语言实战教学:从一个混合定时任务调度器(Crontab)深入理解Go的并发、接口与工程哲学
开发语言·后端·golang
thinktik3 小时前
AWS EKS 计算资源自动扩缩之Fargate[AWS 海外区]
后端·kubernetes·aws
不爱编程的小九九4 小时前
小九源码-springboot099-基于Springboot的本科实践教学管理系统
java·spring boot·后端
lang201509284 小时前
Spring Boot集成Spring Integration全解析
spring boot·后端·spring
雨夜之寂4 小时前
第一章-第二节-Cursor IDE与MCP集成.md
java·后端·架构
大G的笔记本4 小时前
Spring IOC和AOP
java·后端·spring
武子康5 小时前
Java-155 MongoDB Spring Boot 连接实战 | Template vs Repository(含索引与常见坑)
java·数据库·spring boot·后端·mongodb·系统架构·nosql