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

概况

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

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")使用。

推荐去我的博客阅读更多:

1.Java JVM、集合、多线程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、后端、架构、阿里巴巴等大厂最新面试题

觉得不错,别忘了点赞+转发哦!

posted @   Java技术栈  阅读(2592)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示