前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【开发日记】Spring中@Autowired和@Resource

【开发日记】Spring中@Autowired和@Resource

作者头像
全栈开发日记
发布2022-12-07 11:22:05
2410
发布2022-12-07 11:22:05
举报
文章被收录于专栏:全栈开发日记

区别

1- 提供方不同

1.1、@Autowired注解由Spring提供,所属包:

代码语言:javascript
复制
org.springframework.beans.factory.annotation

1.2、@Resource注解由JDK提供,所属包:

代码语言:javascript
复制
javax.annotation

2- 导入方式不同

2.1、@Autowired注解只能按照类型注入,如果需要使用此注解按名称注入的话则需要搭配@Qualifier来实现按名称注入。

2.2、@Resource注解默认使用名称注入,但也可以使用类型注入。

名称注入:

代码语言:javascript
复制
@Resource(name="AutowiredTestImpl1")
private AutowiredTest autowiredTest;

类型注入:

代码语言:javascript
复制
@Resource(type=AutowiredTest.class)
private AutowiredTest autowiredTest;

类型和名称同时指定:

代码语言:javascript
复制
@Resource(type=AutowiredTest.class,name = "AutowiredTestImpl1")
private AutowiredTest autowiredTest;

当类型与名称同时指定时,会找到唯一符合的bean进行注入。

强制注入

默认情况下,会在应用启动时@Autowired@Resource注解会在IOC容器中查找相对应的Bean,如果没有则报错。

使用@Autowired注解可以设置非强制注入,该注解的required属性默认值为true,表示强制注入;将该属性值改为false后,在应用启动时如果有这个Bean就注入,没有就跳过,不会报错。

代码语言:javascript
复制
@Autowired(required = false)
private AutowiredTest autowiredTest;

多个符合条件的Bean

1- 问题

使用@Autowired时如果容器中有两个或两个以上的Bean符合注入条件,会报错如下:

代码语言:javascript
复制
expected single matching bean but found 2

表示期望一个Bean,但是找到两个。

2- 解决

2.1、使用@Primary注解设置主要Bean;当发现多个符合条件的Bean时,那么优先注入被@Primary注解的Bean。

代码语言:javascript
复制
@Component
@Primary
public class AutowiredTestImpl1 implements AutowiredTest...

2.2、配合@Qualifier注解,实现的效果如同使用@Resource对name和type都进行了设置。

代码语言:javascript
复制
@Autowired
@Qualifier("AutowiredTestImpl1")
private AutowiredTest autowiredTest;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 区别
    • 1- 提供方不同
      • 2- 导入方式不同
      • 强制注入
      • 多个符合条件的Bean
        • 1- 问题
          • 2- 解决
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档