理解@Autowired和@Resource注解的区别

风里有诗句 2024-01-04 16:37:16 浏览数 (430)
反馈

在 Spring 框架中,@Autowired 和 @Resource 是两个常用的注解,用于实现依赖注入。尽管它们都可以用于自动装配 Bean,但它们在某些方面存在一些区别。本文将详细解释 @Autowired 和 @Resource 注解的区别,包括使用方式、依赖查找方式和适用范围。

下载

@Autowired 注解

@Autowired 注解是 Spring 框架提供的注解之一,用于自动装配 Bean。它可以用于字段、构造函数、Setter 方法以及方法参数上。当 Spring 容器创建 Bean 实例时,会自动解析和注入相应的依赖。

@Autowired 注解的特点

  • 默认按照类型进行依赖查找和注入。
  • 如果存在多个匹配的 Bean,可以通过指定 Bean 的名称或使用 @Qualifier 注解来进行精确匹配。
  • 可以在构造函数、Setter 方法和字段上使用。

示例代码

@Component
public class MyClass {
    @Autowired
    private MyDependency myDependency;
    
    // 构造函数注入
    @Autowired
    public MyClass(MyDependency myDependency) {
        this.myDependency = myDependency;
    }
    
    // Setter 方法注入
    @Autowired
    public void setMyDependency(MyDependency myDependency) {
        this.myDependency = myDependency;
    }
    
    // 方法参数注入
    @Autowired
    public void myMethod(MyDependency myDependency) {
        this.myDependency = myDependency;
    }
}

@Resource 注解

@Resource 注解是 Java EE 提供的注解,也可以用于依赖注入。它可以在字段、Setter 方法和方法参数上使用。

@Resource 注解的特点

  • 默认按照名称进行依赖查找和注入,可以通过指定 name 属性或使用 @Qualifier 注解来进行精确匹配。
  • 可以在字段、Setter 方法和方法参数上使用。

示例代码

@Component
public class MyClass {
    @Resource
    private MyDependency myDependency;
    
    // Setter 方法注入
    @Resource
    public void setMyDependency(MyDependency myDependency) {
        this.myDependency = myDependency;
    }
    
    // 方法参数注入
    public void myMethod(@Resource MyDependency myDependency) {
        this.myDependency = myDependency;
    }
}

@Autowired 和 @Resource 的区别

  • 来源:@Autowired 是 Spring 框架提供的注解,而 @Resource 是 Java EE 提供的注解。
  • 依赖查找方式:@Autowired 默认按照类型进行依赖查找和注入,可以通过指定 Bean 名称或使用 @Qualifier 注解来精确匹配。而 @Resource 默认按照名称进行依赖查找和注入,也可以通过指定 name 属性或使用 @Qualifier 注解来精确匹配。
  • 兼容性:@Autowired 是 Spring 框架的特定注解,只能在 Spring 应用中使用。而 @Resource 是 Java EE 提供的注解,可以在任何 Java EE 兼容的应用中使用。
  • 注入方式:@Autowired 可以用于字段、构造函数、Setter 方法和方法参数上。而 @Resource 可以用于字段、Setter 方法和方法参数上。

总结

@Autowired 和 @Resource 注解在依赖注入方面有一些区别。@Autowired 是 Spring 框架提供的注解,按照类型进行依赖查找和注入,默认适用于 Spring 应用;而 @Resource 是 Java EE 提供的注解,按照名称进行依赖查找和注入,适用于任何 Java EE 兼容的应用。根据具体的应用场景和需求,选择合适的注解来实现依赖注入。

1698630578111788

如果你对编程知识和相关职业感兴趣,欢迎访问编程狮官网(https://www.w3cschool.cn/)。在编程狮,我们提供广泛的技术教程、文章和资源,帮助你在技术领域不断成长。无论你是刚刚起步还是已经拥有多年经验,我们都有适合你的内容,助你取得成功。

0 人点赞