为什么可以使用@Resource,但不推荐使用@Autowired

news/2024/11/15 0:57:57/

DI注入的三种方式
1、属性注入
属性注入应该是我们用的最多的一种,即通过@Autowired注解,该注解默认是按照ByType方式(按类型)注入Bean,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)。示例代码:

@Service
public class UserService {private static User user;// 1. Filed Injection 属性注入@Autowiredprivate PlayService playService;
}

2、setter 方法注入
setter方式也会用到@Autowired注解,不过是用在成员属性的set方法上

// 2. Setter Injection setter注入
private PlayService playService;
@Autowired
public void setPlayService(PlayService playService) {this.playService = playService;
}

3、构造器注入
构造器注入,则是把需要注入的对象,通过构造器来进行初始化

 	private PlayService playService;UserService(PlayService playService) {this.playService = playService;
}
 @Componentpublic interface PlayService {void play();}@Component@Slf4jpublic class Mp3Player implements PlayService {@Overridepublic void play() {log.info("Mp3Player play()");}}@Component@Slf4jpublic class Mp4Player implements PlayService {@Overridepublic void play() {log.info("Mp4Player play()");}}

区别:
1、@Resource是Java的标准注解,定义在javax.annotation.Resource包中,主要用于EJB 组件的依赖注入,但在Spring中也可以用于bean的注入。
2、@Autowired 是 Spring 框架提供的注解,定义在org.springframework.beans.factory.annotation.Autowired 包中,专门用于 Spring 环境下的依赖注入。
3、@Resource 默认按照名称进行注入,如果找不到匹配名称的 bean,则退而求其次按照类型进行注入。可以通过 name 属性指定 bean 名称,或者通过 lookup 属性指定查找方法。
4、@Autowired 默认按照类型进行注入,如果类型匹配的 bean 多于一个,则会抛出异常,除非指定了具体的 bean 名称。可以通过 required 属性来控制是否必须找到匹配的 bean。
5、IDEA推荐@Resource
(1)@Resource 是 Java 标准的一部分,因此可能被视为更通用的解决方案
(2)使用 @Resource 可以避免 Spring 的特定依赖,使得代码看起来与 Spring 解耦。 IDEA 的推荐也可能基于减少 Spring 特定的警告,例如关于字段注入的警告


http://www.ppmy.cn/news/1504207.html

相关文章

Flink-StarRocks详解:第四部分StarRocks分区管理,数据压缩(第54天)

文章目录 前言2.3.3 管理分区2.3.3.1 增加分区2.3.3.2 删除分区2.3.3.3 恢复分区2.3.3.4 查看分区 2.3.4 设置分桶2.3.4.1 随机分桶(自 v3.1)2.3.4.2 哈希分桶2.3.4.2.1 优点2.3.4.2.2 如何选择分桶键2.3.4.2.3 注意事项 2.3.4.3 确定分桶数量 2.3.5 最佳…

浦语提示词工程实践

一、任务 背景问题&#xff1a;近期相关研究发现&#xff0c;LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题&#xff0c;例如认为13.8<13.11。 任务要求&#xff1a;利用LangGPT优化提示词&#xff0c…

Bugku-ctf-web-eval

<?phpinclude "flag.php";$a $_REQUEST[hello];eval( "var_dump($a);");show_source(__FILE__); ?> include "flag.php"; 这行代码尝试包含一个名为flag.php的文件。这个文件可能包含一些配置信息或其他代码&#xff0c;但是没有提供这…

安装 pytorch-lightning 和pytorch

&#xff08;1&#xff09;要注意版本对齐&#xff1a;[env]pytorch_lightning和pytorch对应版本问题_pytorch-lightning版本对应-CSDN博客 &#xff08;2&#xff09;要注意安装的是什么 pip install pytorch-lightning has been deprecated and will stop being updated Ju…

网络空间资产测绘:为安全防护“画出”实时“地图”

网络空间已成为继海、陆、空、天之后的“第五疆域”&#xff0c;对其空间布局进行摸排并形成“地图”&#xff0c;是维护网络空间安全的基础性工作。近日在2024全球数字经济大会上发布的DayDayMap全球网络空间资产测绘平台&#xff0c;能为用户提供全面、精准、实时的全球网络空…

STKMATLAB 卫星编队覆盖分析纯代码实现

任务描述 设置卫星编队&#xff08;沿航迹编队&#xff0c;大斜视角&#xff0c;幅宽100km&#xff0c;下视角30&#xff0c;斜视角26&#xff09;&#xff0c;设置分析区域&#xff08;中国全境&#xff09;&#xff0c;设置FigureOfMerit&#xff08;展示覆盖率&#xff09;…

目标检测ultralytics-YOLOv8学习笔记(持续更新)

目录 YOLOV8官方文档示例命令格式各项参数解释总结 上述命令输出性能指标输出类别性能指标速度指标输出总结 IOU阈值1. mAP502. mAP50-95区别总结&#xff1a;实际应用中的选择&#xff1a;示例&#xff1a; 精度与召回率精度&#xff08;Precision&#xff09;召回率&#xff…

SpringMVC和Spring

1.AOP 1.基础内容 AOP是面向切面的的编程&#xff0c;AOP 是一种编程思想&#xff0c;是面向对象编程&#xff08;OOP&#xff09;的一种补充。 面向切面编程&#xff0c;实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术&#xff08;增强代码&#xff09;&…