@Autowired 和 @Resource 的区别

@Autowired 和 @Resource 都是用于依赖注入的注解,但它们来自不同的框架,并且在使用方式和功能上有一些区别

区别

  1. 来源不同:@Autowired 是 Spring 框架提供的注解。@Resource 是 Java EE 规范(JSR-250)提供的注解,Spring 对其进行了支持。
  2. 注入方式不同:@Autowired 按照类型进行自动装配。如果存在多个相同类型的 bean,则可以通过 @Qualifier 注解来指定要注入的具体 bean。@Resource 可以按照名称或类型进行注入。如果同时指定了名称和类型,则按照名称进行注入;如果只指定了名称,则按照名称进行注入;如果只指定了类型,则按照类型进行注入。
  3. 对字段和方法的支持不同:@Autowired 可以用于字段、构造函数和方法上。@Resource 可以用于字段和方法上。
  4. 对属性的支持不同:@Autowired 不支持 name 属性。@Resource 支持 name 属性,可以通过指定名称来注入特定的 bean。
  5. 优先级不同:如果同时使用了 @Autowired 和 @Resource 注解,并且它们都能够满足注入要求,那么 @Autowired 的优先级更高。

测试

创建配置类与注入类

@NoArgsConstructor
@AllArgsConstructor
@ToString
@Data
public class Student {
    private String name;
    private Integer age;
    private Double grade;

    public void display(){
        System.out.println("name:"+name+" age:"+age+" grade:"+grade);
    }
}
@Configuration
public class Config {
    // 创建一个名为 "studentAutowired" 的 Student 对象
    @Bean(name = "studentAutowired")
    public Student studentAutowired() {
        return new Student("Alice", 20, 90.5);
    }

    // 创建一个名为 "studentResource" 的 Student 对象
    @Bean(name = "studentResource")
    public Student studentResource() {
        return new Student("Bob", 21, 85.5);
    }
}

1.注入方式测试

  • Autowired无参测试
    @Autowired //@Autowired无参测试
    private Student studentAutowired;

    @Test
    void testStudentAutowired() {
        // 输出注入的 Student 对象信息
        System.out.println("Student Autowired: " + studentAutowired);
        studentAutowired.display();
    }

运行结果:

Student Autowired: Student(name=Alice, age=20, grade=90.5)
name:Alice age:20 grade:90.5
可以看到 @Autowired 默认通过byType的方式进行注入

  • 使用 @Qualifier 指定注入
    @Autowired //@Autowired无参测试
    @Qualifier(value = "studentResource")
    private Student studentAutowired;

    @Test
    void testStudentAutowired() {
        // 输出注入的 Student 对象信息
        System.out.println("Student Autowired: " + studentAutowired);
        studentAutowired.display();
    }

运行结果

Student Resource: Student(name=Bob, age=21, grade=85.5)
name:Bob age:21 grade:85.5

相关推荐

  1. @Autowired @Resource 区别

    2024-07-13 21:54:03       17 阅读
  2. @Autoware@Resource区别

    2024-07-13 21:54:03       49 阅读
  3. Spring面试整理-AutowiredResource关键字区别

    2024-07-13 21:54:03       55 阅读
  4. @Autowired与@Resource区别

    2024-07-13 21:54:03       38 阅读
  5. 【SpringBoot】@Autowired @Resource 使用

    2024-07-13 21:54:03       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 21:54:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 21:54:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 21:54:03       58 阅读
  4. Python语言-面向对象

    2024-07-13 21:54:03       69 阅读

热门阅读

  1. 基于深度学习的语言生成

    2024-07-13 21:54:03       22 阅读
  2. 华为OD机考题(HJ6 质数因子)

    2024-07-13 21:54:03       22 阅读
  3. (day11)1614. 括号的最大嵌套深度

    2024-07-13 21:54:03       19 阅读
  4. anaconda常用指令学习

    2024-07-13 21:54:03       18 阅读
  5. paddlenlp cpu windows 下测试gpt

    2024-07-13 21:54:03       21 阅读
  6. 维度评分:Kylin Cube设计中的自定义智能

    2024-07-13 21:54:03       21 阅读