总结:推荐使用@Resource,如果追求速度,就使用@Resource指定名字(或者在注入接口的时候,强制指定实现类名)
spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。
  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
  @Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
 
 @Autowired 与@Resource的区别:
1、 @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

2、 @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

@Autowired()
@Qualifier(“baseDao”)
privateBaseDao baseDao;
3、@Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。

个人总结:
@Autowired 根据类型type注入,

@Qualifier(“cusInfoService”)//一般作为@Autowired()的修饰用,

@Autowired @Qualifie(“userService”) 两个结合起来可以根据名字和类型注入

@Resource 默认根据名字name注入,其次按照类型搜索,也可以通过name和type属性进行选择性注入

一般@Autowired和@Qualifier一起用,@Resource单独用。

当然没有冲突的话@Autowired也可以单独用
@Resource
默认情况下是按照名称进行匹配,如果没有找到相同名称的Bean,则会按照类型进行匹配,有人可能会想了,这下好了,用这个是万能的了,不用管名字了,也不用管类型了,

缺点:

根据这个注解的匹配效果可以看出,它进行了两次匹配,也就是说,如果你在UserService这个类上面这样写注解,@Service,它会怎么找呢,首先是找相同名字的,如果没有找到,再找相同类型的,而这里的@Service没有写名字,这个时候就进行了两次搜索,显然,速度就下降了许多。也许你还会问,这里的@Service本来就没有名字,肯定是直接进行类型搜索啊。其实不是这样的,UserServiceImpl 上面如果有@Service默认的名字 是这个userServiceImpl,注意看,就是把类名前面的大写变成小写,就是默认的Bean的名字了。一般开发都会自己指定名字,例如:userService

@Resource根据名字搜索是这样写@Resource(“userService”),如果你写了这个名字叫userService,那么UserServiceImpl上面必须也是这个名字,不然还是会报错。

@Autowired @Qualifie(“userService”)

是直接按照名字进行搜索,也就是说,对于UserServiceImpl 上面@Service注解必须写名字,不写就会报错,而且名字必须是@Autowired @Qualifie(“userService”) 保持一致。如果@Service上面写了名字,而@Autowired @Qualifie() ,一样会报错。

说了这么多,可能你有些说晕了,那么怎么用这三个呢,
要实际的工作是根据实际情况来使用的,UserServiceImpl上面可能会这样写 @Service(“userService”),这样通常使用AutoWire和@Resource多一些,bean的名字不用写。

这里的实际工作情况,到底是什么情况呢?

如果你的架构设计师考虑的比较精细,要求比较严格,要求项目上线后的访问速度比较好,这个时候@AutoWire没有@Resource好用,因为@Resource可以根据名字来搜索,是这样写的@Resource(name=“userService”),可以直接写@Resource(“userService”),因为默认byname。

为什么推荐@Resource(name=“userService”)???

因为根据名字搜索是最快的,就好像查数据库一样,根据Id查找最快。因为这里的名字与数据库里面的ID是一样的作用。这个时候,就要求你多写几个名字,工作量自然就增加了。而如果你不用注解,用xml文件的时候,对于注入Bean的时候要求写一个Id,xml文件时候的id就相当于这里的名字。

这个@Autowired @Qualifie(“userService”) 也可以用名字啊,为什么不用呢?

原因很简单,这个有点长,不喜欢,增加工作量。

说了那么多没用,你能做的就是简单直接,什么最方便就用什么,
你就直接用@Resource得了,如果你喜欢用@Autowire也行,不用写名字。
参考:@Autowired 与@Resource选择(治好你的强迫症)

@Autowired 与@Resource选择相关推荐

  1. Spring注解@Component、@Repository、@Service、@Controller,@Autowired、@Resource用法

    一.Spring定义bean,@Component.@Repository.@Service 和 @Controller Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥 ...

  2. 综合技术 --@Autowired和@Resource

    2019独角兽企业重金招聘Python工程师标准>>> 1.@Autowired和@Resource 的作用一样,都是自动注入 2.@Autowired是按照byType自动注入,而 ...

  3. Spring @Autowired和@Resource

    @Autowired和@Resource 共同点:都是装配bean的注解 不同点: @Autowired 提供者:@Autowired是Spring提供的注解 装配方式:ByType(通过类的类型)装 ...

  4. @AutoWired和@Resource注解异同分析

    相同点: @AutoWired和@Resource注解都是从Spring容器中取出相应的bean对象,自动装配. 不同点: @AutoWired: 默认根据类型进行自动装配,依赖的对象必须存在,如果允 ...

  5. Spring框架在属性注入时@Autowired和@Resource的区别

    相同点: @Autowired和@Resource都可以进行引用类型属性的注入 不同点: 属性的依赖注入有两种方式: "byName":根据名称自动装配,引用数据类型bean的id ...

  6. 【Spring注解系列13】Spring自动装配总结:@Autowired、@Resource、@Qualifier、@Inject

    目录 1.@Autowired.@Resource.@Qualifier.@Inject 1).@Autowired 2).@Resource与@Inject 3). @Autowired参数取值 2 ...

  7. 请谈一下@Autowired 和@Resource区别是什么?

    请谈一下@Autowired 和@Resource区别是什么? 共同点: 两者都可以加在属性和setter方法上面,如果都写在属性上,那么就不需要再写setter方法. 不同点: ① @Autowir ...

  8. @Autowired和@Resource注解的区别?

    谈到Spring的注解,@Autowired和@resource这两个注解不得不提.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上 那@A ...

  9. Spring系列(十):@Autowired 和@Resource注解用法介绍

    今天给大家分享Spring属性注入的注解@Autowired 和@Resource介,希望对大家能有所帮助! 一.@Autowired 注解 1.1 介绍 @Autowired注解默认按照类型容器中找 ...

  10. Spring中@Autowired和@Resource的区别

    一.定义 @Autowired 对类成员变量.方法及构造函数进行标注,完成自动装配的工作. @Resource 在语义上被定义为通过其唯一的名称来标识特定的目标组件,其中声明的类型与匹配过程无关. 如 ...

最新文章

  1. Java项目:实现权限管理系统(java+SpringBoot+MyBatis+AOP+LayUI+Mysql)
  2. smartsql和mysql_SmartSql 常见问题
  3. [SOJ] 畅通工程续
  4. fasta文件中DNA to RNA
  5. iOS14更新了需要注意哪些适配
  6. laravel-echo-server 不接收失败_6所高校公布报名不合格名单!这些问题最容易出错...
  7. 深入浅出 Cocoa 之 Core Data(3)- 使用绑定
  8. ac3168无线网卡驱动下载_70块的笔记本网卡,值不值得换
  9. pygame 鼠标事件
  10. 优动漫PAINT画面上色技巧——渐变映射
  11. 什么是重载?有什么作用?
  12. 小码哥php教程,小码哥Java从0到高级工程师
  13. 基于anyrtc的sdk实现直播连麦互动
  14. 实在智能签约上海联通,共创美好智慧生活
  15. Java实现图片的镜像处理
  16. 英特尔 超核芯显卡 620mac_显卡性能翻倍,AI能力加持:英特尔发布10代酷睿处理器...
  17. 长高不仅靠遗传,让孩子再次长高的秘诀都在这
  18. Skywalking环境搭建及demo实战
  19. matlab cft结果导出,补体结合试验(CFT)
  20. open falcon 监控php,小米监控系统open-falcon安装

热门文章

  1. 报道|香港科大校友“盐马行”活动成功举办
  2. 计算机专业技能考核方案,巩义市计算机专业技能课教学考核方案.doc
  3. XSS labs 闯关大合集
  4. 关于a标签的hover问题
  5. oracle 12c 驱动包
  6. 【转载】应聘总经理的答卷,供大家打分
  7. Mac使用-键盘符号对照
  8. layui tree组件更改图标
  9. mysql -b -w_MySQL系列(三)
  10. 解决redhat无法连接网络问题