【Spring】——17、@Resource注解和@Inject注解?

news/2025/2/12 15:11:42/

在这里插入图片描述

📫作者简介:zhz小白
公众号:小白的Java进阶之路
专业技能:
1、Java基础,并精通多线程的开发,熟悉JVM原理
2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线上调优经验
3、熟悉MySQL数据库调优,索引原理等,⽇志原理等,并且有出过⼀篇专栏
4、了解计算机⽹络,对TCP协议,滑动窗⼝原理等有⼀定了解
5、熟悉Spring,Spring MVC,Mybatis,阅读过部分Spring源码
6、熟悉SpringCloud Alibaba体系,阅读过Nacos,Sentinel,Seata,Dubbo,Feign,Gateway核⼼源码与设计,⼆次开发能⼒
7、熟悉消息队列(Kafka,RocketMQ)的原理与设计
8、熟悉分库分表ShardingSphere,具有真实⽣产的数据迁移经验
9、熟悉分布式缓存中间件Redis,对其的核⼼数据结构,部署架构,⾼并发问题解决⽅案有⼀定的积累
10、熟悉常⽤设计模式,并运⽤于实践⼯作中
11、了解ElasticSearch,对其核⼼的原理有⼀定的了解
12、了解K8s,Jekins,GitLab
13、了解VUE,GO
14、⽬前有正在利⽤闲暇时间做互游游戏,开发、运维、运营、推销等

本人著作git项目:https://gitee.com/zhouzhz/star-jersey-platform,有兴趣的可以私聊博主一起编写,或者给颗star
领域:对支付(FMS,FUND,PAY),订单(OMS),出行行业等有相关的开发领域
🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~

文章目录

  • 1、@Resource
    • 1.1、使用
    • 1.2、总结
  • 2、@Inject
    • 2.1、使用
  • 3、@Resource和@Inject注解与@Autowired注解的区别

1、@Resource

  • 默认按照名称进行装配,名称可以通过name属性进行指定,
  • 如果没有指定name属性,
    • 当注解写在字段上默认取字段名进行按照名称查找,
    • 如果注解写在setter方法上默认取属性名进行装配。
  • 当找不到与名称匹配的bean时才按照类型进行装配。
  • 但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配

@Resource的源码如下:
在这里插入图片描述

1.1、使用

BookDao.java

package com.zhz.dao;import org.springframework.stereotype.Repository;/*** @author zhouhengzhe* @description: todo* @date 2022/11/4 10:56* @since v1*/
@Repository
public class BookDao {private String label;public String getLabel() {return label;}public void setLabel(String label) {this.label = label;}@Overridepublic String toString() {return "BookDao{" +"label='" + label + '\'' +'}';}
}

BookService.java

package com.zhz.service;import com.zhz.dao.BookDao;
import org.springframework.stereotype.Service;import javax.annotation.Resource;/*** @author zhouhengzhe* @description: todo* @date 2022/11/4 10:56* @since v1*/
@Service
public class BookService {@Resource(name="bookDao1")private BookDao bookDao;@Resource(name="bookDao2")private BookDao bookDao2;@Overridepublic String toString() {return "BookService{" +"bookDao=" + bookDao +"bookDao2=" + bookDao2 +'}';}
}

MainConfig.java

package com.zhz.config;import com.zhz.bean.Person;
import com.zhz.condition.AppleCondition;
import com.zhz.condition.BananaCondition;
import com.zhz.condition.WatermelonCondition;
import com.zhz.dao.BookDao;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;/*** @author zhouhengzhe* @description: todo* @date 2022/11/4 10:27* @since v1*/@Configuration
@ComponentScan("com.zhz.service")
public class MainConfig {@Bean("bookDao1")public BookDao bookDao1() {BookDao bookDao = new BookDao();bookDao.setLabel("1");return bookDao;}@Primary@Bean("bookDao2")public BookDao bookDao2() {BookDao bookDao = new BookDao();bookDao.setLabel("2");return bookDao;}
}

test方法:

   @Testpublic void test2(){AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);BookService bookService = applicationContext.getBean(BookService.class);System.out.println(bookService);}

运行结果:
在这里插入图片描述

1.2、总结

  • @Resource注解和@Autowired注解的功能是一样的,都能实现自动装配,只不过@Resource注解默认是按照组件名称(即属性的名称)进行装配的。虽然@Resource注解具备自动装配这一功能,但是它是不支持@Primary注解优先注入的功能的,而且也不能像@Autowired注解一样能添加required=false属性。

2、@Inject

  • 默认是根据参数名去寻找bean注入,支持spring的@Primary注解优先注入,@Inject注解可以增加@Named注解指定注入的bean。

源码如下所示:
在这里插入图片描述

2.1、使用

依赖pom.xml:

<dependency><groupId>javax.inject</groupId><artifactId>javax.inject</artifactId><version>1</version>
</dependency>

只需要把上面的测试代码的dao引用改成

package com.zhz.service;import com.zhz.dao.BookDao;
import org.springframework.stereotype.Service;import javax.annotation.Resource;/*** @author zhouhengzhe* @description: todo* @date 2022/11/4 10:56* @since v1*/
@Service
public class BookService {@Injectprivate BookDao bookDao;@Overridepublic String toString() {return "BookService{" +"bookDao=" + bookDao +'}';}
}

然后看其运行结果,发现其跟@Autowired注解一样的,都是默认优先装配使用了@Primary注解标注的组件。。
在这里插入图片描述

3、@Resource和@Inject注解与@Autowired注解的区别

不同点

  • @Autowired是spring专有注解,@Resource是java中JSR250中的规范,@Inject是java中JSR330中的规范
  • @Autowired支持参数required=false,@Resource,@Inject都不支持
  • @Autowired,和@Inject支持@Primary注解优先注入,@Resource不支持
  • @Autowired通过@Qualifier指定注入特定bean,@Resource可以通过参数name指定注入bean,@Inject需要@Named注解指定注入bean

相同点

  • 三种注解都可以实现bean的注入。

http://www.ppmy.cn/news/3694.html

相关文章

正则表达式

文章目录一、正则初体验二、匹配规则三、字符串方法的使用一、正则初体验 正则表达式是特殊的字符序列&#xff0c;利用事先定义好的特定字符以及他们的组合组成了一个规则&#xff0c;然后检查一个字符串是否与这种规则匹配来实现对字符的过滤或匹配。 比如我们的QQ登录页面…

【论文阅读】inception v1学习总结

【论文阅读总结】inception v1总结1. 摘要2. 序言3. 文献综述4.动机和高层考虑4.1提高深度神经网络性能的最直接方法4.1.1 增加模型的大小4.1.2 解决增加模型大小导致的缺点思路5.结构详述5.1 Inception架构的主要思想5.2 原生inception块问题5.3 解决通道数增加问题5.4 1*1卷积…

特殊符号——双引号和单引号

特殊符号——双引号和单引号一.通常理解二.一般使用三.特殊使用四.为何计算机需要字符一.通常理解 在c语言中&#xff0c;我们通常认为双引号保存的是字符串&#xff0c;单引号里保存的是字符。这里也没什么好说的&#xff0c;说一说它们的细微的一些地方 二.一般使用 接下来我…

华为机试 - 找到比自己强的人数

题目描述 给定数组[[2,1],[3 2]],每组表示师徒关系,第一个元素是第二个元素的老师,数字代表排名,现在找出比自己强的徒弟。 输入描述 无 输出描述 无 用例 输入[[2,1],[3,2]]输出[0,1,2]说明输入: 第一行数据[2,1]表示排名第 2 的员工是排名第 1 员工的导师,后面的数据…

ElasticSearch 调优

第一部分&#xff1a;调优索引速度 第二部分&#xff1a;调优搜索速度 第三部分&#xff1a;通用的一些建议 英文原文&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/how-to.html ES发布时带有的默认值&#xff0c;可为es的开箱即用带来很好的…

2023年pmp的考试时间是什么时候?

PMP 考试一年是有四次考试&#xff0c;分别是 3 月、6月、9月、12月&#xff0c;不出意外的话就是这几个月了&#xff0c;提前 2 个月开始报名&#xff0c;但还是要关注PMI/基金会官网的信息&#xff0c;以官网的消息为准。 一、报考条件 报考条件其实挺简单的&#xff0c;最核…

JavaScript高级 |彻底搞懂原型对象

本文已收录于专栏⭐️ 《JavaScript》⭐️ 学习指南&#xff1a;对象的原型函数的原型new操作符将方法放原型里constructor总结梳理原型对象内存表现完结散花参考文献对象的原型 JavaScript 当中每个对象都有一个特殊的内置属性[[prototype ]] ,这个特殊的对象可以指向另外一个…

高并发编程之ThreadPool 线程池

10 ThreadPool 线程池 10.1 线程池简介 线程池&#xff08;英语&#xff1a;thread pool&#xff09;&#xff1a;一种线程使用模式。线程过多会带来调度开销&#xff0c; 进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监督管理 者分配可并发执…