Java 面试题
目录

Spring 框架中 Java 的 @Autowired 和 @Resource 的区别是什么?

· 约 3 分钟读完 · 第 184 / 274 章

推荐答案

在 Spring 框架中,@Autowired 和 @Resource 都用于依赖注入,但它们有一些关键区别:

  1. 来源不同:

    • @Autowired 是 Spring 框架提供的注解。
    • @Resource 是 Java 标准库(JSR-250)提供的注解。
  2. 默认注入方式:

    • @Autowired 默认按类型(byType)进行注入。
    • @Resource 默认按名称(byName)进行注入。
  3. 支持参数:

    • @Autowired 可以通过 @Qualifier 注解指定具体的 bean 名称。
    • @Resource 可以直接通过 name 属性指定 bean 名称。
  4. 适用范围:

    • @Autowired 可以用于构造器、字段、方法等。
    • @Resource 主要用于字段和方法。

本题详细解读

@Autowired 详解

@Autowired 是 Spring 框架的核心注解之一,用于自动装配 bean。它的主要特点包括:

  • 按类型注入:默认情况下,@Autowired 会根据类型来查找匹配的 bean。如果有多个相同类型的 bean,Spring 会抛出异常。
  • 配合 @Qualifier:当有多个相同类型的 bean 时,可以通过 @Qualifier 注解指定具体的 bean 名称。
  • 支持多种注入方式:@Autowired 可以用于构造器、字段、setter 方法等。

@Resource 详解

@Resource 是 Java 标准库提供的注解,Spring 也支持使用它进行依赖注入。它的主要特点包括:

  • 按名称注入:默认情况下,@Resource 会根据名称来查找匹配的 bean。如果未指定名称,则会按类型查找。
  • 支持 name 属性:可以通过 name 属性直接指定 bean 名称。
  • 适用范围:@Resource 主要用于字段和方法注入。

总结对比

特性 @Autowired @Resource
来源 Spring 框架 Java 标准库(JSR-250)
默认注入方式 按类型(byType) 按名称(byName)
指定 bean 名称 通过 @Qualifier 注解 通过 name 属性
适用范围 构造器、字段、方法等 主要用于字段和方法

通过以上对比,开发者可以根据具体需求选择合适的注解进行依赖注入。