@Resource和@Autowire有什么区别

在Spring框架中,@Resource 和 @Autowired 是两种常用的依赖注入注解,用于将Bean注入到另一个Bean中。尽管它们的目标相似,都用于实现依赖注入,但它们之间有一些关键的区别。以下是它们的主要区别和使用方式:

1、 定义和来源
@Autowired:
来源:是Spring框架提供的注解,属于Spring的特有功能。
包名:org.springframework.beans.factory.annotation.Autowired
作用:通过类型(by type)自动注入Bean,是Spring中用于自动装配的注解。
@Resource:
来源:是来自于J2EE(Java EE)的标准注解,遵循JSR-250规范,不仅限于Spring框架使用。
包名:javax.annotation.Resource
作用:既可以通过名称(by name)注入,也可以通过类型(by type)注入。如果同时指定了名称和类型,优先使用名称。

2、 注入方式
@Autowired:

  • 默认情况下是通过类型(by type)注入的。如果有多个相同类型的Bean,可以结合 @Qualifier
  • 注解来指定要注入的Bean名称。 不需要设置属性名称即可进行依赖注入。 可以用在构造函数、setter方法、或成员变量上。
  • 支持required 属性(默认是 true),用来表示是否必须注入,如果找不到依赖会抛出异常。可以设置 required=false 以避免注入失败。
@Autowired
private MyService myService;
@Autowired(required = false)
private MyOptionalService myOptionalService;

@Resource:
默认是通过名称(by name)注入的,依赖注入的属性名会被作为Bean的名称。如果找不到与名称匹配的Bean,再尝试按类型(by type)注入。
可以通过 name 属性指定明确的Bean名称,通过 type 属性指定类型。
与Spring的耦合较低,因为是标准的J2EE注解,具有更广泛的适用性。

@Resource
private MyService myService;
@Resource(name = "mySpecificService")
private MyService myServiceByName;

3、默认行为
@Autowired:默认情况下是必须要找到合适的Bean注入,否则会抛出异常(除非设置 required=false)。
@Resource:不会有 required 属性,它默认情况下必须要找到对应的Bean,否则会抛出异常。

举个例子:

//PostFavourMapper 不加注解
//@Mapper
public interface PostFavourMapper extends BaseMapper<PostFavour> {

}

在这里插入图片描述](https://i-blog.csdnimg.cn/direct/191e3c24edd148ac833a8a1b47e6b037.png)

4、 应用场景
@Autowired:更倾向于Spring应用,充分利用Spring的功能特性。如果你使用Spring框架开发项目,@Autowired 是更标准的选择。
@Resource:如果你的项目需要遵循Java EE标准或需要在不依赖Spring框架的情况下运行,@Resource 是更合适的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值