- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
@Autowired和@Resource都是Java Spring框架中的注解,用于实现依赖注入(DI)和控制反转(IoC)。 它们的区别主要在以下三个方面:
源头不同 。
@Autowired是Spring自带的注解,而@Resource是JSR 250规范中定义的注解。因此,在使用Spring框架的时候,通常建议使用@Autowired注解。 。
。
查找顺序不同 。
在注入Bean时,@Autowired注解的查找顺序为:先按类型(byType)匹配,如果有多个Bean符合该类型,则再按照名称(byName)进行匹配。如果两种方式都无法唯一确定Bean,则会抛出异常。 伪代码如下:
public class Person { private Phone phone; @Autowired public void setPhone(Phone phone) { this.phone = phone; } //... } public interface Phone { //... } @Component("apple") public class ApplePhone implements Phone { //... } @Component("huawei") public class HuaweiPhone implements Phone { //... }
在上面的示例中,如果有ApplePhone和HuaweiPhone两个Bean都实现了Phone接口,那么当Person类的setPhone方法被调用时,Spring会根据类型匹配到这两个Bean,但是无法唯一确定,此时会抛出异常。可以通过添加@Qualifier注解来指定具体的Bean:
伪代码如下:@Autowired @Qualifier("apple") public void setPhone(Phone phone) { this.phone = phone; }
而@Resource注解的查找顺序为:先按照名称(byName)进行匹配,如果无法匹配到Bean,则再按照类型(byType)进行匹配.
伪代码如下:public class Person { private Phone phone; @Resource(name = "apple") public void setPhone(Phone phone) { this.phone = phone; } //... } @Component("apple") public class ApplePhone implements Phone {...} @Component("huawei") public class HuaweiPhone implements Phone {...}
在上面的示例中,当Person类的setPhone方法被调用时,Spring会先根据名称查找是否有名称为"apple"的Bean,如果有,则直接注入;如果没有,则再根据类型匹配.
。
适用范围不同 。
@Autowired注解可以用于构造器、Setter方法、字段和方法上,而@Resource注解只能用于字段和方法上。因此,如果需要在构造器中注入Bean,就必须使用@Autowired注解。综上所述,建议在使用Spring框架时,尽量使用@Autowired注解。 以下是具体的代码示例:
public interface Phone { String brand(); } @Component("apple") public class ApplePhone implements Phone { @Override public String brand() { return "Apple"; } } @Component("huawei") public class HuaweiPhone implements Phone { @Override public String brand() { return "Huawei"; } } @Component public class Person { // 使用@Autowired注解进行注入 @Autowired private Phone phone1; // 使用@Resource注解进行注入,指定名称 @Resource(name = "apple") private Phone phone2; private Phone phone3; public void setPhone3(Phone phone3) { this.phone3 = phone3; } // 使用@Autowired注解和@Qualifier注解进行注入 @Autowired @Qualifier("huawei") public void setPhone4(Phone phone4) { this.phone4 = phone4; } }
在上面的示例中,Person类中有四个属性需要注入Bean。其中,phone1属性使用了@Autowired注解,使用默认的查找方式进行注入;phone2属性使用了@Resource注解,并指定了名称为"apple"的Bean进行注入;phone3属性没有.
。
总结一下:
@Autowired是Spring框架提供的注解,@Resource是Java EE 5规范提供的注解。 。
@Autowired默认按照类型自动装配,而@Resource默认按照名称自动装配。 。
@Autowired支持@Qualifier注解来指定装配哪一个具有相同类型的bean,而@Resource 默认按照名称进行注入,如果指定了name或者type属性,则会按照指定的名称或者类型来查找对应的Bean实例进行注入.
综上所述,@Autowired更加灵活,但也更加复杂;@Resource更加简单、直观,适用于简单的场景.
。
。
往期面试题:
Java面试题:如果你这样做,你会后悔的,两次启动同一个线程~~~ 。
Java面试题:@PostConstruct、init-method和afterPropertiesSet执行顺序?
Java面试题:SimpleDateFormat是线程安全的吗?使用时应该注意什么?
Java面试题:细数ThreadLocal大坑,内存泄露本可避免 。
Java面试题:请谈谈对ThreadLocal的理解?
Java面试题:为什么HashMap不建议使用对象作为Key?
Java面试题:你知道Spring的IOC吗?那么,它为什么这么重要呢?
Java面试题:线程池内“闹情绪”的线程,怎么办?
Java面试题:Spring Bean线程安全?别担心,只要你不写并发代码就好了! 。
Java面试题:Spring框架除了IOC和AOP,还有哪些好玩的设计模式?
。
最后此篇关于Java面试题:让依赖注入变得简单,面对@Autowired和@Resource,该如何选择?的文章就讲到这里了,如果你想了解更多关于Java面试题:让依赖注入变得简单,面对@Autowired和@Resource,该如何选择?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有一个 servlet 代码用于将 excel/zip 文件从生产服务器下载到本地计算机。当我单击生产服务器上的“保存”或“打开”按钮时,它会抛出 ClientAbortException。相同的代码
在我的搜索页面中,默认情况下我使用 page=0 进行分页。并在 asyncData 方法中使用此参数调用 api。但不知何故,该值增加了一个。 所以这是我的网址,例如, http://localho
任何人都可以解释下面这段代码,我正在努力弄清楚。 order = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1357902468' pr
我正在 Java 平台上开发一个实时战略游戏克隆,我有一些概念性的问题关于放置在哪里以及如何管理游戏状态。游戏使用Swing/Java2D作为渲染。在目前的开发阶段,没有模拟,也没有人工智能,只有用户
这个问题在这里已经有了答案: Simple Linux Signal Handling (5 个答案) 关闭 8 年前。 我的应用程序已经配置了一个 SIGTERM 处理程序。例如: Signal(
我正在尝试创建一个会在几秒钟后淡入视野的文本,但我遇到了问题。淡入 View 效果很好,但文本在显示后几乎立即消失。其次我需要这个动画以延迟的方式工作,但是当我设置延迟时它似乎没有任何区别。延迟在早些
我正在尝试在我的项目 pubspec.yaml 中添加 flutter_svg: ^0.5.1 并面临以下问题。 依赖flutter_svg >=0.0.2 需要Flutter SDK版本>=0.3.
我在使用 Go 的 sync.Map 时遇到问题。以下是详细信息: 我创建了一个全局同步 map ,如下所示: var MySyncGlobalMap = sync.Map{} 在一个事件中,我用预期
12月9日,Apache 基金会针对一个名为 Log4Shell 的关键零日漏洞发布了紧急更新,这个在Log4j(一个用于各种Java应用的开源日志框架)中发现的漏洞被认定为CVE-2021-442
DNS 劫持作为最常见的网络攻击方式,是每个站长或者运维团队最为头疼的事情。苦心经营的网站受到 DNS 劫持后,不仅会影响网站流量、权重,还会让用户置身于危险之中,泄露隐私造成财产损失。 就是这样
我遇到过使用 Vision Framework 进行真人脸检测的问题。我在下面提到了苹果链接。 https://developer.apple.com/documentation/vision/tra
我是 MySQL 的新手,一直遇到一些错误,但我总能找到解决方案,除了这个,我不知道如何解决它。 如果变量“ue”为 1 或 0(一堆存在验证),则以下 MySQL 过程返回一个值。验证部分 (SET
我的应用程序出现此错误: java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536 我知道这是由于单个 dex 文
我必须对几乎在发送的每个请求中都使用 javax.faces.FormSignature 的应用程序进行负载测试。我正在使用这样的 xPath 提取器来获取 FormSignature 的值: /ht
屏幕上有 6 个开关控件。一次只能启用一个开关。如果第 5 个开关打开,则一个标签和一个文本字段应该可见或者隐藏。 当 5 开关从关闭变为打开并再次变为关闭时,我遇到了问题。标签和提交的文本应该被隐藏
当我将它应用于主体颜色或更改字体大小时,它工作正常,但当涉及到使元素 float 或 flex-direction 时,它根本不回应。尝试了所有可能的方法,只是不确定这里有什么问题:请检查代码,我认为
我希望我能得到一些关于如何解决这个问题的信息。我是 jenkins 的新手,正在尝试设置 jenkins 服务器。 启用 SSL 后,我无法登录 Jenkins。 Chrome 抛出错误 ERR_SS
我的项目是 EJB3 上的 java 项目,使用 Hibernate 和 Weblogic 服务器。 为了方便起见(据我所知,hibernate 很典型),一些实体包含循环依赖(父知道子,子知道父)。
@Autowired和@Resource都是Java Spring框架中的注解,用于实现依赖注入(DI)和控制反转(IoC)。它们的区别主要在以下三个方面: 源头不同 @Autowir
我正在使用下面的插件来自动管理补丁版本。 id "com.zoltu.git-versioning" version "3.0.3" 基本上,上述插件需要使用 v.major.minor 约定标记代码
我是一名优秀的程序员,十分优秀!