论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
SQL-Server
›
Spring 中的 @Resource vs @Autowired 他的区别用法? ...
Spring 中的 @Resource vs @Autowired 他的区别用法?
伤心客
论坛元老
|
2024-11-11 17:26:11
|
显示全部楼层
|
阅读模式
楼主
主题
1028
|
帖子
1028
|
积分
3084
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
在 Spring 的世界里,依赖注入无疑是焦点之一,而 @Autowired 和 @Resource 则是两个使用频率极高的注解。它们看似相似,但现实用法和行为却有许多不同。今天,我们来深入探讨它们的差异,让你在项目中更精准地使用它们。
一、根本概念:到底是什么?
@Autowired
:是 Spring 框架提供的注解,用于自动装配 Bean。其默认按范例(byType)装配,而且在无法唯一匹配时,会再按 Bean 的名称举行装配。
@Resource
:则是来自 Java 的 JSR-250 标准(Java EE 注解),通常在 Spring 环境中也被支持。默认按名称(byName)装配,找不到匹配时则按范例。
二、@Autowired 的工作方式
@Autowired 注解的魅力在于其灵活的自动装配方式。当需要注入一个 Bean 时,@Autowired 会首先按范例寻找符合的 Bean。当存在多个同范例 Bean 时,若没有额外说明,Spring 将会报错。但可以通过加上 @Qualifier 指定 Bean 名称来办理:
@Autowired
@Qualifier("mySpecificBean")
private MyService myService;
复制代码
Required 属性
@Autowired 默认是“强制装配”,即 required=true。若没有找到匹配的 Bean,则会抛出异常。但我们可以通过将 required 设置为 false,来允许没有找到 Bean 时不注入:
@Autowired(required = false)
private Optional<MyService> myService;
复制代码
通过 Optional 范例,可以或许更优雅地处理 Bean 的缺失。
三、@Resource 的工作方式
与 @Autowired 不同,@Resource 默认是按名称注入。它会优先寻找与属性名一致的 Bean 名称,如果找不到,则按范例注入。这种按名称优先的特性在现实使用中可以带来更多控制:
@Resource(name = "mySpecificBean")
private MyService myService;
复制代码
如果名称没有指定,Spring 会直接根据属性名查找与之对应的 Bean。例如,如果属性是 myService,它会实验找到名称为 myService 的 Bean。
四、@Autowired vs. @Resource 的区别一览
特性@Autowired@Resource
来源
Spring 特有JSR-250 标准(Java EE)
默认装配方式
按范例(byType)按名称(byName)
兼容性
仅限 Spring 环境Java 标准,更广泛兼容
Required 属性
支持 required不支持 required
装配精致化控制
共同 @Qualifier 使用可通过 name 属性指定名称
五、怎样选择?
如果你的项目完全基于 Spring,并希望更自由地按范例注入,@Autowired 是更好的选择。
若项目有可能需要兼容 Java EE 标准,或需要严酷的按名称注入,@Resource 更符合需求。
六、总结
在 Spring 中,@Autowired 和 @Resource 提供了不同的依赖注入风格。合理使用它们,可以帮助我们写出更加灵活、可维护的代码。理解它们的区别,将让你在项目中更加游刃有余!
推荐阅读文章
由 Spring 静态注入引发的一个线上T0级别变乱(真的以后得避坑)
怎样理解 HTTP 是无状态的,以及它与 Cookie 和 Session 之间的接洽
HTTP、HTTPS、Cookie 和 Session 之间的关系
什么是 Cookie?简单介绍与使用方法
什么是 Session?怎样应用?
使用 Spring 框架构建 MVC 应用步调:初学者教程
有缺陷的 Java 代码:Java 开发人员最常犯的 10 大错误
怎样理解应用 Java 多线程与并发编程?
把握Java泛型的艺术:协变、逆变与不可变性一扫而空
Java Spring 中常用的 @PostConstruct 注解使用总结
怎样理解线程安全这个概念?
理解 Java 桥接方法
Spring 整合嵌入式 Tomcat 容器
Tomcat 怎样加载 SpringMVC 组件
“在什么情况下类需要实现 Serializable,什么情况下又不需要(一)?”
“避免序列化灾难:把握实现 Serializable 的真相!(二)”
怎样自定义一个自己的 Spring Boot Starter 组件(从入门到实践)
解密 Redis:怎样通过 IO 多路复用征服高并发挑战!
线程 vs 虚拟线程:深入理解及区别
深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别
10大步调员提升代码优雅度的必杀技,刹时让你成为团队宠儿!
“打破重复代码的魔咒:使用 Function 接口在 Java 8 中实现优雅重构!”
Java 中消除 If-else 本领总结
线程池的焦点参数配置(仅供参考)
【人工智能】聊聊Transformer,深度学习的一股清流(13)
Java 枚举的几个常用本领,你可以试着用用
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
伤心客
论坛元老
这个人很懒什么都没写!
楼主热帖
《百万IT毕业生的心声:IT专业大学生毕 ...
Java打怪之路----谷粒商场认证服务 ...
xtrabackup2版本和xtrabackup8版本对比 ...
Excelize 发布 2.6.1 版本,支持工作簿 ...
sqlserver导入sql文件的方式
原型设计工具比较及实践--滴爱音乐 ...
Snowflake(雪花算法),什么情况下会 ...
Flink-使用流批一体API统计单词数量 ...
SQL Server 2008下载及安装
基于 SpringBoot + MyBatis 的博客系统 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
分布式数据库
网络安全
Java
虚拟化与私有云
移动端开发
.Net
MES
Oracle
DevOps与敏捷开发
快速回复
返回顶部
返回列表