@Resource,@Autowired,@Inject3种注入方式详解

简介: JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。

image.png

概况


@Resource,@Autowired,@Inject 这3种都是用来注入bean的,它们属于不同的程序中。


image.png


JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。


区别


@Resource


它有两个关键的属性:name-名称,type-类型


1、如果指定了name,type,则从Spring容器中找一个名称和类型相当应的一个bean,找不到则报错。


2、如果只指定了name,则从Spring容器中找一个名称和name一样的bean,找不到则报错。


3、如果只指定了type,则从Spring容器中找一个类型和type一样的bean,找不到或者找到多个则报错。


4、如果没有指定参数,则默认找字段名称装配,找不到则按类型装配,找不到则报错。


@Autowired


默认按类型装配,找不到或者找到多个则报错。


如果要按名称装配,需要结合Spring另外一个注解Qualifier("name")使用。


默认必须装配requred=true,如果可以为空,可以设置为false,在Spring4+结合jdk8+的情况下还可以使用Optional和false同等的效果,如

@Autowired
private Optional<UserService> userService;

@Inject

和@Autowired类似,可以完全代替@Autowired,但这个没有required属性,要求bean必须存在。

如果要按名称装配,需要结合javax另外一个注解N("name")使用。

相关文章
51开发板同一程序实现数码管实现时钟显示、秒表计时。通过独立按键选择模式(时钟/秒表)、时间的重定义
51开发板同一程序实现数码管实现时钟显示、秒表计时。通过独立按键选择模式(时钟/秒表)、时间的重定义
677 3
|
SQL Oracle 关系型数据库
Havij功能详解
Havij功能详解
Havij功能详解
|
机器学习/深度学习 监控
DeepSeek进阶开发与应用3:DeepSeek中的模型调优技术
本文深入探讨了DeepSeek框架中的模型调优技术,涵盖超参数优化、正则化方法及回调函数的应用。通过学习率调整、网格搜索、L1/L2正则化、Dropout、提前停止和模型检查点等具体示例,帮助读者掌握提升模型性能和防止过拟合的方法。文中还介绍了如何使用回调函数监控和调整训练过程,确保模型在大规模数据集上高效训练。
|
安全 Java Android开发
Kotlin为什么没有Java流行
Kotlin流行不起来的原因
618 1
|
消息中间件 Java 网络架构
在Spring Boot中实现微服务间的通信策略
在Spring Boot中实现微服务间的通信策略
|
XML Java 关系型数据库
springboot整合ssm详细讲解
springboot整合ssm详细讲解
809 1
vue3 watch 监听多值以及深度监听用法
vue3 watch 监听多值以及深度监听用法
3231 0
|
存储 应用服务中间件 nginx
一文搞清楚 Docker 镜像、容器、仓库
Docker 镜像、容器、仓库是 Docker 技术中的三个重要概念.....
9219 1
一文搞清楚 Docker 镜像、容器、仓库
|
敏捷开发 设计模式 Unix
嵌入式C语言代码的基本编写规范要求
嵌入式C语言代码的基本编写规范要求
843 0