简析@Resource 和 @Autowired的区别

简介: @Autowird@Autowird 属于spring框架,默认使用类型(byType)进行注入,例如下面代码:@Autowired public IUserService userService 系统会根据IUserService接口进行注入,如果这个接口只有一个实现类,那么会正常注入,如果有多个实现类,他会报错,如果没有实现类,它也会报错.

@Autowird

@Autowird 属于spring框架,默认使用类型(byType)进行注入,例如下面代码:

@Autowired   
public IUserService userService  

系统会根据IUserService接口进行注入,如果这个接口只有一个实现类,那么会正常注入,如果有多个实现类,他会报错,如果没有实现类,它也会报错.可以对这个问题进行限定,如下面的代码:

@Autowired(required = false)   
public IUserService userService  

如果找不到对应的bean时候,不会抛出错误,如果required = true,当不存在bean时候,就会抛出异常

可以使用@Qualifier配合@Autowird使用,@Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName .如下面代码

@Autowired   
@Qualifier("userServiceImpl")   
public IUserService userService;  
或者
@Autowired   
public void setUserDao(@Qualifier("userDao") UserDao userDao) {   
    this.userDao = userDao;   
}  

 这样spring会根据@Qualifier指定的id进行注入(依据ID查询对应的bean)


@Resource

@Resource是JavaEE自带的注解,根据ID进行注入的.@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方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,

参考文章

目录
相关文章
|
SQL 安全 前端开发
详解开源数据库审计平台Yearning
详解开源数据库审计平台Yearning
13803 2
C++ 捕获所有异常并拿到错误原因的方法
C++ 捕获所有异常并拿到错误原因的方法
689 0
|
4月前
|
XML Java 测试技术
JaCoCo 代码覆盖率:Spring Boot 集成与报告解读
单测写了但不知道测到没?本文用 JaCoCo 代码覆盖率工具,3 步 Maven 插件配置接入 Spring Boot,手把手教你生成并读懂覆盖率报告。
JaCoCo 代码覆盖率:Spring Boot 集成与报告解读
|
4月前
|
数据库 开发工具 知识图谱
从 DeepWiki 到 OpenWiki:Agent Wiki 到底有什么用?
Agent Wiki 是一种新型知识管理范式:将RAG中“查询时实时检索”改为“导入时预编译”,用模型自动生成并持续维护结构化Markdown Wiki。它解决传统RAG重复推导、无法积累的问题,适用于稳定文档集,但需区分“文档知识”与“用户记忆”。
573 0
|
数据安全/隐私保护
使用校园账号登录WOS(Web of Science)并检索文献
使用校园账号登录WOS(Web of Science)并检索文献
2806 0
|
算法 Python
算法理论——回溯算法及剪枝优化
回溯法也可以叫做回溯搜索法,它是一种搜索的方式。
967 0
算法理论——回溯算法及剪枝优化
|
算法 小程序 API
2025年最新蓝牙Beacon技术深度剖析与停车场定位导航实战指南
本文通过分析蓝牙Beacon技术工作原理、停车场定位导航硬件部署、蓝牙信号平滑处理等,旨在剖析蓝牙Beacon技术在停车场定位导航系统中的实际应用与优势,迅速定位空闲车位,提供反向寻车功能,并优化停车场管理流程,有效解决大型停车场中的找车位难题。如需获取详细解决方案可前往文章最下方获取,如有项目需求及技术合作可私信作者。
1466 0
|
边缘计算 物联网 5G
软件定义网络(SDN)的未来趋势:重塑网络架构,引领技术创新
【8月更文挑战第20天】软件定义网络(SDN)作为新兴的网络技术,正在逐步重塑网络架构,引领技术创新。随着5G、人工智能、边缘计算等技术的不断发展,SDN将展现出更加广阔的应用前景和市场潜力。未来,SDN有望成为主流网络技术,并在各行各业推动数字化转型。让我们共同期待SDN技术带来的更加智能、安全和高效的网络体验。
1238 1
|
开发框架 Oracle Java
JDK8和JDK17安装切换,IDEA配置多个版本JDK
JDK8和JDK17安装切换,IDEA配置多个版本JDK
|
消息中间件 监控 调度
Celery与RabbitMQ的结合【Python】
【8月更文挑战第18天】 Celery与RabbitMQ结合是构建高效Python分布式系统的利器。Celery作为分布式任务队列,支持任务调度与结果管理;RabbitMQ则确保了消息的可靠传递。二者联用不仅提升了系统的异步处理能力,还增强了其扩展性与可靠性。通过简单的安装与配置,即可实现任务的异步执行与调度,同时利用监控工具优化性能并确保安全性。这种组合适用于需要处理大量异步任务的应用场景,极大地简化了分布式系统的设计与实现。