当前位置: 首页 > article >正文

自动注入@resource和@autowired的区别

标题自动注入@resource和@autowired的区别

@Resource : 按名称进行注入

来源:JSR-250标准注解,属于Java EE的一部分。
默认行为:按名称(byName)注入。如果找不到指定名称的Bean,则按类型(byType)注入。
使用场景:
当希望通过名称注入Bean时。
当希望代码与Spring框架解耦,使用标准注解时。

按名称注入适合以下场景:

1.容器中存在多个相同类型的Bean。

public interface UserService {
    void execute();
}

@Component("userServiceA") // 指定Bean的名称为userServiceA
public class UserServiceA implements UserService {
    @Override
    public void execute() {
        System.out.println("UserServiceA is running");
    }
}

@Component("userServiceB") // 指定Bean的名称为userServiceB
public class UserServiceB implements UserService {
    @Override
    public void execute() {
        System.out.println("UserServiceB is running");
    }
}

例如,我的UserService有两种不一样的实现execute的方法,这样我在调用UserService的时候,就需要@Resource(name = “userServiceA”)一下,明确对应的UserService具体是哪一个。

2.需要明确指定Bean的名称。
3.使用第三方库或框架时,Bean名称固定。
4.希望代码与Spring框架解耦。

@Autowired : 按类型进行注入

来源:Spring框架自带的注解。
默认行为:按类型(byType)注入。如果找到多个匹配的Bean,会按名称(byName)注入。
使用场景:1.希望通过类型注入Bean时。2.希望结合@Qualifier注解来指定具体的Bean名称时。

按类型注入适合以下场景:

1.Bean类型唯一
2.不关心Bean的具体名称。
3.使用接口或抽象类。
4.结合@Primary或@Qualifier注解。
5.动态代理场景。
6.框架或库的设计。
7.单元测试。

Tips(个人理解,若有错误请指出)

1.在spring框架中,如果容器中仅有一种类型的Bean,即你的Bean构造体没有利用@Component来实现多种方法时,那这时候两种都可以使用;
2. @Autowired 使用的spring框架,而@Resource使用的是java框架,因此正常情况下,可以优先考虑使用@Resource。


http://www.kler.cn/a/590155.html

相关文章:

  • Bridge Constructor Medieval for Mac 桥梁构造师:中世纪解谜建桥游戏 支持M、Intel芯片
  • uniapp+Vue3 开发小程序功能(下载文件)
  • 爬楼梯(js实现,LeetCode:70)
  • 每天五分钟深度学习PyTorch:循环神经网络RNN的计算以及维度信息
  • css的显示模式
  • Redis----大key、热key解决方案、脑裂问题
  • Matlab 舰载机自动着舰控制系统研究
  • SpringMVC(四)Restful软件架构风格
  • 【从零开始学习计算机科学】算法分析(三)动态规划 与 贪心算法
  • STM32---FreeRTOS事件标志组
  • 数学建模:MATLAB循环神经网络
  • PostgreSQL教程(二)九大类型
  • 第27周JavaSpringboot git初识
  • 如何在Django中设置CSRF Token?
  • 【计算机网络】浏览器组成、工作原理、页面渲染流程...
  • 什么是 Fisher 信息矩阵
  • JDBC数据库连接池技术详解——从传统连接方式到高效连接管理
  • Android Dagger2 框架注入模块源码深度剖析(四)
  • matlab图论分析之指标计算(二)
  • CSS @media print 使用详解