天天看点

@Resource和@Autowired注解的区别以及作用

@Resource和@Autowired注解的区别以及作用

  1. @Resource和@Autowired的作用:都是用来实现依赖注入的,都可以写在字段或者setter方法之上的。

  2. @Resource和@Autowired注解的区别

 ①@Autowired:由Spring提供,@Resource由Java提供

 ②@Autowired默认是通过 (不指定属性)type进行自动匹配的,当同一个bean拥有相同类型或者注入的bean不存在时则会抛出异常。(特殊情况下边代码介绍)

在UserService中注入UserDao:

@Autowired
private UserDao userDao ;
           
 XML注入bean 的方式(对照)
<bean id="userDao" class="com.feicui.pojo.UserDao"/>

 <bean id="userService" class="com.nynu.pojo.UserService">
     <property name="userDao" ref="userDao" />
 </bean>
           
@Resource 默认(不指定属性)是根据name属性值来自动注入的(反射机制),其中name和type也是其最重要的两个属性。
@Resource     //默认
private String bucketName;  


@Resource(name="userService")
private String bucketName;    
           
注意:name属性值指的不是XML中id的值而是name的值。

 3.  @Resource和@Autowired的非默认用法

       @Autowired默认情况下对象不能为空在,当需要对象值为null时,可以通过required属性来设置,

       @Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用

@Autowired () 
@Qualifier ("userDao" )
private UserDao userDao;
           

      @Resource的装配顺序:

         当没有配置属性值的时候使用默认的name属性匹配,当匹配失败的时候,则退回原始类型进行匹配,匹配成功则会自动注入。

         当指定了type属性时,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。

         当指定了name属性时,则从上下文中查找名称匹配的bean进行装配,找不到则抛出异常。

         当name和type都指定的时候,则从上下文中匹配唯一的bean进行装配,找不到则会抛异常。

参考博文:https://blog.csdn.net/weixin_40423597/article/details/80643990