Java基础——@Autowired 和 @Resource的区别和使用介绍

@Autowired@Resource 是在 Spring 框架中用于依赖注入的注解,它们有不同的定义和使用方式。

@Autowired

定义

@Autowired 是 Spring Framework 提供的注解,用于自动注入 Bean。它通过类型自动匹配依赖项。Spring 容器会自动解析和注入标记了 @Autowired 的 Bean 的依赖项。

使用
  • 自动注入@Autowired 会根据 Bean 的类型自动注入依赖项。如果有多个匹配的 Bean,可以使用 @Qualifier 注解来指定具体的 Bean。
  • 构造函数注入:可以用在构造函数上,标记构造函数的参数来自动注入所需的 Bean。
  • 方法注入:可以用在 setter 方法上,自动注入方法参数。
  • 属性注入:可以用在字段上,直接注入依赖项。
示例
@Component
public class ServiceA {
    @Autowired
    private ServiceB serviceB; // 自动注入 ServiceB 的实例
}

@Component
public class ServiceB {
    // ServiceB 的定义
}
配置

@Autowired 注解可以配置为必需(required=true,默认值)或可选(required=false)。如果设为 false,Spring 在找不到匹配的 Bean 时不会抛出异常,而是将属性设置为 null

@Autowired(required = false)
private ServiceB serviceB; // 如果 ServiceB 不存在,serviceB 将为 null

@Resource

定义

@Resource 是 Java EE 标准注解(javax.annotation.Resource),用于按名称注入 Bean。如果没有指定名称,则按类型匹配。

使用
  • 按名称注入@Resource 默认通过 Bean 的名称来注入依赖。如果 Bean 的名称与字段名匹配,Spring 会根据名称注入 Bean。
  • 按类型注入:如果没有指定 name 属性,Spring 会尝试根据类型进行注入。
示例
@Resource(name = "serviceB")
private ServiceB serviceB; // 按名称注入 ServiceB 的实例

如果不指定 name 属性:

@Resource
private ServiceB serviceB; // 按类型注入
配置

@Resource 注解的 name 属性用于指定要注入的 Bean 名称。没有 @Resource 的时候,Spring 默认会尝试使用字段名作为 Bean 名称进行注入。

区别总结

  1. 注入方式

    • @Autowired 主要通过类型注入,默认需要 @Qualifier 进行进一步的指定。
    • @Resource 主要通过名称注入,可以通过 name 属性明确指定注入的 Bean 名称,如果 name 属性为空,则会尝试通过类型注入。
  2. 兼容性

    • @Autowired 是 Spring 特有的注解,只能在 Spring 框架中使用。
    • @Resource 是 Java EE 标准注解,兼容性更强,可以在 Spring 及其他支持 Java EE 的容器中使用。
  3. 默认行为

    • @Autowired 默认情况下,Spring 会尝试注入所有符合类型的 Bean,可能会出现多个匹配项的情况。
    • @Resource 默认情况下,Spring 会使用 Bean 的名称进行注入,更加直接。

总结

  • 使用 @Autowired 时,如果需要通过类型进行注入,并且可能有多个候选 Bean,可以结合 @Qualifier 使用。
  • 使用 @Resource 时,如果你更关心 Bean 的名称(或更希望遵循 Java EE 标准),可以使用 @Resource
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值