深入理解@Resource与@Autowired:用法与区别解析

@Resource

@Resource 是Java EE提供的注解,也可以在Spring中使用。它是按照名称进行注入的,默认通过属性名(通常是类名的小驼峰命名方式)或者name属性来匹配。如果找不到符合名称的bean,则会抛出异常。在使用时可以指定 name 属性来明确指定要注入的bean的名称,也可以通过 type 属性来指定要注入的bean的类型。 示例:

假设有一个叫做 SomeBean 的类:

@Component
public class SomeBean {
    // ...
}

使用 @Resource 注解来注入该类的实例时,可以直接在需要注入的属性上使用 @Resource 注解,属性名会被默认匹配到对应的bean:

@Component
public class AnotherBean {
    @Resource
    private SomeBean someBean;
    // ...
}

但需要注意以下问题:

  1. 命名不一致:如果属性名与bean的名称不一致,将无法正确匹配到对应的bean,会抛出异常。此时可以通过指定 name 属性来明确指定要注入的bean的名称

    @Component
    public class AnotherBean {
        @Resource(name = "otherName")
        private SomeBean someBean;
        // ...
    }

    我们使用 @Resource 注解的 name 属性指定了要注入的 bean 的名称为 "otherName"。因此,Spring 会在容器中查找名称为 "otherName" 的 bean,并将其注入到 AnotherBean 类的 someBean 属性中

  2. 多个匹配项:如果存在多个符合类型的bean,且都符合属性名匹配规则,会抛出异常。此时可以通过指定 name 属性来明确指定要注入的bean的名称,或者结合 @Qualifier 注解使用。

    举个例子,假设有两个名为 someBean1someBean2 的 bean:

    @Component("someBean1")
    public class SomeBean {
        // ...
    }
    ​
    @Component("someBean2")
    public class AnotherBean {
        // ...
    }
    ​
    @Component
    public class YetAnotherBean {
        @Autowired
        @Qualifier("someBean1")
        private SomeBean someBean;
        // ...
    }

    @Qualifier 注解中的值应该是要注入的 bean 的名称或标识符,而不是属性名或类名。

@Autowired

@Autowired是Spring框架提供的注解,在Spring中广泛应用。它默认按照类型进行注入,通过匹配对象类型来实现自动装配。如果存在多个匹配的bean,可以使用 @Qualifier 注解结合 @Autowired 来指定具体的bean名称进行注入。 示例:

@Autowired
private SomeBean someBean;
  • @Autowired 是非必须的,如果找不到匹配的Bean,Spring容器仍然会正常启动。

  • @Resource 是必须的,如果找不到匹配的Bean,会抛出异常。

 总结:对于使用 Spring Boot 项目,通常建议优先使用 @Autowired 注解。因为 Spring Boot 默认集成了 Spring 框架,并做了一些自动配置,@Autowired 可以更好地适应和利用 Spring Boot 的特性。此外,@Autowired 的语义也更加清晰和直观。因为它是 Spring 提供的原生注解,而且更加灵活。

如果你的项目同时使用了 JavaEE 相关技术,可能更倾向于使用 @Resource

相关推荐

  1. 深入理解@Resource@Autowired区别

    2024-01-02 11:42:02       37 阅读
  2. @Autowired@Resource区别

    2024-01-02 11:42:02       19 阅读
  3. 深入理解RCNN:区域建议区域兴趣池化技术

    2024-01-02 11:42:02       16 阅读
  4. 深入理解实践:npm常命令全面

    2024-01-02 11:42:02       12 阅读
  5. @Autoware和@Resource区别

    2024-01-02 11:42:02       30 阅读
  6. MySQL中的索引:深入理解案例

    2024-01-02 11:42:02       34 阅读
  7. Python闭包:深入理解应用场景

    2024-01-02 11:42:02       14 阅读
  8. Redis:原理、概念、实例

    2024-01-02 11:42:02       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-02 11:42:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-02 11:42:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-02 11:42:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-02 11:42:02       18 阅读

热门阅读

  1. JDK下载地址

    2024-01-02 11:42:02       48 阅读
  2. GRU算法

    GRU算法

    2024-01-02 11:42:02      32 阅读
  3. ansible搭建和基本使用

    2024-01-02 11:42:02       42 阅读
  4. 数据库-期末考前复习-第1章-绪论

    2024-01-02 11:42:02       32 阅读
  5. React 实现 Step组件

    2024-01-02 11:42:02       44 阅读
  6. react怎么实现跨页面传参

    2024-01-02 11:42:02       40 阅读