@Resource用法与@Autowired 用法 用法相似,也是做依赖注入的,从容器中自动获取bean。但还是有一定的区别。

  • 在启动spring的时候,首先要启动容器;
  • 启动spring容器时,会默认寻找容器扫描范围内的可加载bean,然后查找哪些bean上的属性和方法上有@Resource注解;
  • 找到@Resource注解后,判断@Resource注解括号中的name属性是否为空,如果为空:看spring容器中的bean的id与@Resource要注解的那个变量属性名是否相同,如相同,匹配成功;如果不相同,看spring容器中bean的id对应的类型是否与@Resource要注解的那个变量属性对应的类型是否相等,若相等,匹配成功,若不相等,匹配失败。
  • 如果@Resource注解括号中的name属性不为空,看name的属性值和容器中的bean的id名是否相等,如相等,则匹配成功;如不相等,则匹配失败。
    示例如下:

一、@Resource注解注解的name属性不为空

首先创建Person类,并纳入容器中管理:

package com.lzj.springboot.resource;
import org.springframework.stereotype.Component;/*纳入容器中后,bean的id名字为ps*/
@Component(value="ps")
public class Person {public void say(){System.out.println("------say()------");}
}

然后创建Man类,类中的属性依赖Person类型的bean

package com.lzj.springboot.resource;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;@Component
public class Man {/*从容器中取id名字为ps的bean,如果找不到该bean,spring启动过程中就会报错,表示把Man类型的bean注入到容器中不成功,因为person的属性依赖注入的时候就出错了,所以创建Man的bean的时候肯定不成功。*/@Resource(name="ps")private Person person;/*依赖注入失败,因为Person类型注入到容器中的bean的id指定为ps,所以从容器中获取id为person的bean就会失败*///  @Resource(name="person")//  private Person ps;public void work(){person.say();System.out.println("------work()------");}
}

启动类为:

@SpringBootApplication(scanBasePackages="com.lzj.springboot")
public class App {public static void main(String[] args) {SpringApplication app = new SpringApplication(App.class);ConfigurableApplicationContext context = app.run(args);/*从容器中获取Man类型的bean,如果Man类型的bean注入到容器成功,此时就能获取到;如果注入不成功,则获取不到。注入不成功,就会有可能是Man中的@Resource注解的依赖注入没有成功*/context.getBean(Man.class).work();context.close();}
}

启动工程,输出如下:

------say()------
------work()------

二、@Resource注解注解的name属性为空

1、@Resource要注解的那个变量属性与容器中的bean的id的名字相等
启动类和Person的类与相面一样,下面直接修改Man类如下:

@Component
public class Man {/*@Resource注解的属性变量ps与容器中的bean的id名字ps相等,可以匹配*/@Resourceprivate Person ps;public void work(){ps.say();System.out.println("------work()------");}
}

2、@Resource要注解的那个变量属性与容器中的bean的id的名字不相等
启动类和Person的类与相面一样,下面直接修改Man类如下:

@Component
public class Man {/*@Resource注解的属性变量ps与容器中的bean的id名字ps不相等,然后通过bean的类型判断:person变量属性的类型为Person类,容器中的id为ps的bean的类型也为Person类型,因此此种情况下也可以匹配*/@Resourceprivate Person person;public void work(){person.say();System.out.println("------work()------");}
}

@Resource注解用法相关推荐

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

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

  2. Spring5:@Autowired注解、@Resource注解和@Service注解

    转载:http://www.cnblogs.com/xrq730/p/5313412.html 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有 ...

  3. @Resource注解研究和在SAP Hybris ECP中的应用

    Created by Wang, Jerry, last modified on Jul 27, 2016 @Resource 注解被用来激活一个命名资源(named resource)的依赖注入,在 ...

  4. Spring中@Autowired注解、@Resource注解的区别

    Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...

  5. @Autowired注解与@resource注解的区别(十分详细)

    背景: 今天下班路上看到一个大货车,于是想到了装配,然后脑海里跳出了一个注解@Autowired(自动装配),于是又想到最近工作项目用的都是@Resource注解来进行装配.于是本着学什么东西都要一钻 ...

  6. Java 注解用法详解——@SuppressWarnings

    转自: https://www.cnblogs.com/fsjohnhuang/p/4040785.html Java魔法堂:注解用法详解--@SuppressWarnings 一.前言 编码时我们总 ...

  7. 编码实现Spring 利用@Resource注解实现bean的注入,xml实现基本数据类型的注入

    首先分析. 1: 肯定要利用dom4j读取xml配置文件,将所有的bean的配置信息读取出来 2: 利用反射技术,实例化所有的bean 3: 写注解处理器, 利用注解和内省实现依赖对象的注入. 4: ...

  8. Spring中 @Autowired注解与@Resource注解的区别

    相同点: @Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上. 不同点: (1)提供方:@Autowired是由org.springframework.bea ...

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

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

  10. 重新理解@Resource注解

    @Resource和@Autowired注解都是用来实现依赖注入的.只是@Autowired按byType自动注入,而@Resource默认按 byName自动注入. @Resource有两个重要的属 ...

最新文章

  1. Eclipse 启动Tomcat 超时报错的解决方案
  2. 操作系统与虚拟化安全第一次作业-关键习题
  3. windows自带的压缩,解压缩命令
  4. linux中权限对文件和目录的意义
  5. 的引用_懵!啥是Java软引用、弱引用、虚引用?
  6. 自己实现一个右滑删除的ListView
  7. 用户分析-RFM模型生命周期
  8. 云南计算机专升本数据结构_云南省统招专升本考些什么科目(三)
  9. 非极大值抑制算法(NMS)的python实现
  10. HashMap 排序题
  11. 渗透测试工具包 | 开源安全测试工具 | 网络安全工具
  12. 快来直播:坦然面对东方甄选与股价跌宕起伏
  13. php创建数组教程,PHP中使用array函数新建一个数组
  14. C#常用算法实例(二)
  15. 求树的直径算法以及证明
  16. Sparse R-CNN
  17. 移动端如何在前端阻止input框获得焦点时手机键盘的弹出
  18. 谁再说不熟悉 Linux 命令,就把这个给他扔过去!
  19. 联通eMule的HighID设置方法
  20. HAL库实践记录之串口接收不定长数据

热门文章

  1. Python爬取中国票房网所有电影片名和演员名字,爬取齐鲁网大陆所有电视剧名称...
  2. Linux驱动:电阻屏驱动分析
  3. Hadoop1.0,2.0,3.0区别
  4. 计算机msvcp100.dll,msvcp100.dll丢失怎样修复
  5. 群晖 DS412+ NAS 网络存储器详尽功能应用评测
  6. Char类的常用方法及说明
  7. ddos是攻击服务器还是网站,服务器遭到DDoS攻击选高防IP还是CDN?
  8. 腾讯和360之争所折射出的下作
  9. 设计一个python程序来计算显示通过如图2-7所示的管道_python程序设计习题与答案...
  10. JAVA 字符串转数组并且进行遍历