@Resource和@Autowired注解的区别以及作用
@Resource和@Autowired的作用:都是用来实现依赖注入的,都可以写在字段或者setter方法之上的。
@Resource和@Autowired注解的区别
①@Autowired:由Spring提供,@Resource由Java提供
②@Autowired默认是通过 (不指定属性)type进行自动匹配的,当同一个bean拥有相同类型或者注入的bean不存在时则会抛出异常。(特殊情况下边代码介绍)
在UserService中注入UserDao:
XML注入bean 的方式(对照)@Autowired private UserDao userDao ;
@Resource 默认(不指定属性)是根据name属性值来自动注入的(反射机制),其中name和type也是其最重要的两个属性。<bean id="userDao" class="com.feicui.pojo.UserDao"/> <bean id="userService" class="com.nynu.pojo.UserService"> <property name="userDao" ref="userDao" /> </bean>
注意:name属性值指的不是XML中id的值而是name的值。@Resource //默认 private String bucketName; @Resource(name="userService") private String bucketName;
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