• SpringBoot注解篇之@Resource与@Autowired


    在这里插入图片描述

    大家好,我是AK,最近在整理Java相关技术知识体系化;本篇主要介绍@Resource 注解和 @Autowired的区别以及使用,适合学习spring框架小伙伴了解学习。

    一、@Resource与@Autowired的区别

    @Resource 注解和 @Autowired 注解都是在 Spring Framework 中进行依赖注入的注解,但它们之间有一些区别:

    1. 来源不同:

    @Resource 注解是由 Java EE 提供的注解,它定义在 javax.annotation.Resource 包下。
    @Autowired 注解是由 Spring 提供的注解,它定义在 org.springframework.beans.factory.annotation.Autowired 包下。

    2. 依赖注入策略不同:

    @Resource 注解默认按照名称进行依赖注入,如果有多个具有相同类型的依赖,可以使用 name 属性指定依赖的名称。
    @Autowired 注解默认按照类型进行依赖注入,如果有多个具有相同类型的依赖,可以使用 @Qualifier 注解或者 @Primary 注解指定依赖的名称或主要依赖。

    3. 兼容性不同:

    @Resource 注解属于 Java EE 标准的注解,在 Java EE 环境中可以正常使用。
    @Autowired 注解是 Spring Framework 提供的特定于 Spring 的注解,它可以在 Spring 环境下使用。

    4. 注解属性不同:

    @Resource 注解可以添加 name 属性来指定依赖的名称,还可以添加 mappedName 属性来指定依赖的 JNDI 名称。
    @Autowired 注解可以添加 required 属性来指定依赖是否必须,默认为 true。
    综上所述,@Resource 注解和 @Autowired 注解在功能上有一些相似之处,但也有一些区别。如果你在 Java EE 环境中使用依赖注入,可以选择使用 @Resource 注解;如果在 Spring Framework 环境中使用依赖注入,可以选择使用 @Autowired 注解。需要根据具体的情况选择适合的注解进行依赖注入。

    二、@Resource详解

    @Resource 是 Java EE 的注解之一,它用于进行依赖注入。@Resource 注解可以应用于字段、方法、参数或者类上。

    在 Spring Framework 中,@Resource 注解是由 Spring 提供的用于进行依赖注入的注解之一。当我们在类中使用 @Resource 注解时,Spring 会自动将匹配的依赖注入到目标字段或方法中。

    @Resource 的使用方式有以下几种:

    注解应用在字段上:

    @Resource
    private SomeDependency someDependency;
    
    • 1
    • 2

    注解应用在 setter 方法上:

    private SomeDependency someDependency;
    
    @Resource
    public void setSomeDependency(SomeDependency someDependency) {
        this.someDependency = someDependency;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注解应用在构造函数上:

    private SomeDependency someDependency;
    
    @Resource
    public MyService(SomeDependency someDependency) {
        this.someDependency = someDependency;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注解应用在方法的参数上:

    private SomeDependency someDependency;
    
    @Resource
    public void someMethod(@Resource SomeDependency someDependency) {
        this.someDependency = someDependency;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    需要注意的是,@Resource 注解默认按照名称进行匹配依赖注入。如果有多个具有相同类型的依赖,可以使用 name 属性指定依赖的名称。

    @Resource(name = "someDependency2")
    private SomeDependency someDependency;
    
    • 1
    • 2

    此外,@Resource 注解还可以添加 mappedName 属性来指定依赖的 JNDI 名称。

    总结来说,@Resource 注解是用于进行依赖注入的注解,它可以应用于字段、方法、参数或者类上。默认按照名称进行依赖匹配,也可以通过 name 属性或者 mappedName 属性指定依赖的名称。在 Spring Framework 中,@Resource 注解与 @Autowired 注解类似,但略有区别。

    三、@Autowired详解

    @Autowired 是 Spring Framework 中用于进行依赖注入的注解之一。它可以用于自动装配依赖关系,使得在需要使用某个依赖时,Spring 可以自动将合适的实例注入到目标对象中。

    @Autowired 注解可以应用于字段、构造函数、setter 方法和方法的参数上。

    使用 @Autowired 注解时,Spring 会根据类型进行依赖匹配,它会尝试找到与目标类型匹配的依赖,并将其注入到目标对象中。如果存在多个匹配的依赖时,可以使用 @Qualifier 注解来指定具体注入哪个实例。

    下面是 @Autowired 注解的几种用法:

    注解应用在字段上:

    @Autowired
    private SomeDependency someDependency;
    
    • 1
    • 2

    注解应用在构造函数上:

    private SomeDependency someDependency;
    
    @Autowired
    public MyService(SomeDependency someDependency) {
        this.someDependency = someDependency;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注解应用在 setter 方法上:

    private SomeDependency someDependency;
    
    @Autowired
    public void setSomeDependency(SomeDependency someDependency) {
        this.someDependency = someDependency;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注解应用在方法的参数上:

    private SomeDependency someDependency;
    
    @Autowired
    public void someMethod(SomeDependency someDependency) {
        this.someDependency = someDependency;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    需要注意的是,默认情况下,@Autowired 注解要求依赖必须存在,即依赖对象不能为空。如果想要指定依赖为非必需,可以设置 required 属性为 false。

    @Autowired(required = false)
    private SomeDependency someDependency;
    
    • 1
    • 2

    此外,@Autowired 注解还可以与 @Qualifier 注解一起使用,从而精确指定要注入的依赖实例。

    总结来说,@Autowired 注解是 Spring Framework 中用于进行依赖注入的注解,它可以应用于字段、构造函数、setter 方法和方法的参数上。它根据类型进行依赖匹配,默认要求依赖必须存在,可以使用 @Qualifier 注解指定具体注入哪个实例,也可以设置 required 属性为 false 来声明依赖为非必需。使用 @Autowired 可以简化代码,减少手动注入的工作量。




                                                                                                             ---- 永不磨灭的番号:我是AK



    在这里插入图片描述

  • 相关阅读:
    城市正视图(Urban Elevations, ACM/ICPC World Finals 1992, UVa221)rust解法
    Spring Cloud教程 第十二弹 Spring Cloud Config整合Spring Cloud Bus实现配置动态刷新
    MongoDB权限控制
    HTTP四大参数类型及请求参数的方式和如何接收
    Python uWSGI 安装配置
    ISO体系认证的流程 ISO认证需要的材料
    使用Plotly可视化
    一种更优雅的蓝牙配对技术 - Cross-transport key derivation (CTKD)
    【WINDOWS / DOS 批处理】字符串截取
    Linux下设备树、pinctrl和gpio子系统、LED灯驱动实验
  • 原文地址:https://blog.csdn.net/weixin_36808034/article/details/133789029