@Autowired和@Resource有哪些区别

autowired,resource · 浏览次数 : 62

小编点评

@Autowired和@Resource都是用于实现Bean的自动注入功能。它们之间的主要区别如下: 1. 所属包不同:@Autowired是Spring的注解,而@Resource是Java的标准注解。 2. 依赖注入支持不同:@Autowired可用于构造函数、setter方法和属性,而@Resource仅可用于setter方法和属性。 3. 注入默认类型不同:@Autowired默认按类型注入,@Resource默认按名称注入。当按类型注入找不到合适时,@Autowired会抛出异常;而当按名称注入找不到时,@Resource会按类型注入。 在使用上,它们都可以互相替换,但要注意它们的注入顺序。一般来说,如果可能的话,建议优先选择@Resource,因为它与Java标准更为兼容,且与框架无关。

正文

一、注解的作用

@Autowired和@Resource都是用来实现Bean的自动注入功能。

二、@Autowired和@Resource的区别

1、所属的包不同

  • @Autowired是Spring的注解。
  • @Resource是JSR-250的注解。

IDEA 有时候会在 @Autowired 注解上面提示Field injection is not recommended (字段注入是不被推荐的)这个警告,虽然并不属于报错,但是确实是警告的存在。
就是因为@Autowired是Spring提供的,它是特定IoC提供的特定注解,这就导致了应用与框架的强绑定,一旦换用了其他的IoC框架,是不能够支持注入的。
而 @Resource是 Java 自己提供的,它是Java标准,所以它是与框架无关的。

2、依赖注入的支持不同

  • @Autowired能够用在构造函数、setter方法、属性上。
  • @Resource只能用在setter方法、属性上。

3、注入的默认类型不同

依赖注入功能,是先在容器中查找需要的对象,再将对象注入到当前类中。
查找的方式有两种:

  • byType:根据类型注入,如果容器中有多个相同类型的bean,则注入失败。
  • byName:根据名称注入,如果容器中有多个相同名称的bean,则注入失败。

@Autowired和@Resource都用到了byType和byName两种方式,但二者的使用顺序却不同。

@Autowired默认按类型注入,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false。
如果根据类型找不到合适的bean,则会抛出异常。
如果根据类型找到了多个bean,则再根据bean的名称进行匹配,如果匹配成功,则注入成功;如果匹配失败,则抛出异常。

@Autowired自动注入顺序流程图:

@Resource默认按名称注入,如果按名称注入找不到合适的bean,则再按类型注入。

@Resource自动注入顺序流程图:

也就是:

  • @Autowired默认先根据类型查找,如果找到多个,再根据名称查找;
  • @Resource默认先根据名称查找,如果找不到,再按类型查找。

三、总结

在Spring项目中,这两个注解一般可以互相替换。
主要是要了解它们的注入顺序。

与@Autowired和@Resource有哪些区别相似的内容:

@Autowired和@Resource有哪些区别

一、注解的作用 @Autowired和@Resource都是用来实现Bean的自动注入功能。 二、@Autowired和@Resource的区别 1、所属的包不同 @Autowired是Spring的注解。 @Resource是JSR-250的注解。 IDEA 有时候会在 @Autowired 注解

Java面试题:让依赖注入变得简单,面对@Autowired和@Resource,该如何选择?

@Autowired是Spring框架提供的注解,@Resource是Java EE 5规范提供的注解。 @Autowired默认按照类型自动装配,而@Resource默认按照名称自动装配。 @Autowired支持@Qualifier注解来指定装配哪一个具有相同类型的bean,而@Resourc...

[转帖]@Autowired 和 @Resource 的区别

@Autowired 和 @Resource 的区别 默认注入方式不同 @Autowired 默认的注入方式为byType(根据类型进行匹配),也就是说会优先根据接口类型去匹配并注入 Bean (接口的实现类),如果想要指定名称,可以通过@Qualifier配合使用。 @Autowired priv

@RequiredArgsConstructor和@Authwired

我们在java后端书写接口时,对service层成员变量的注入和使用有以下两种实现方式: **1) @RequiredArgsConstructor** ``` import lombok.RequiredArgsConstructor; import org.springframework.web

Java面试题:Spring中的循环依赖,给程序员带来的心理阴影

循环依赖通常发生在两个或多个Spring Bean之间,它们通过构造器、字段(使用@Autowired)或setter方法相互依赖,从而形成一个闭环。Spring通过三级缓存机制、@Lazy注解以及避免构造器循环依赖等方式来解决循环依赖问题。这些机制使得Spring容器能够更加灵活地处理bean之间...