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

相关文章
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
1503 2
|
安全 Java Android开发
Kotlin为什么没有Java流行
Kotlin流行不起来的原因
418 1
|
Java 测试技术 PHP
父子任务使用不当线程池死锁怎么解决?
在Java多线程编程中,线程池有助于提升性能与资源利用效率,但若父子任务共用同一池,则可能诱发死锁。本文通过一个具体案例剖析此问题:在一个固定大小为2的线程池中,父任务直接调用`outerTask`,而`outerTask`再次使用同一线程池异步调用`innerTask`。理论上,任务应迅速完成,但实际上却超时未完成。经由`jstack`输出的线程调用栈分析发现,线程陷入等待状态,形成“死锁”。原因是子任务需待父任务完成,而父任务则需等待子任务执行完毕以释放线程,从而相互阻塞。此问题在测试环境中不易显现,常在生产环境下高并发时爆发,重启或扩容仅能暂时缓解。
315 0
|
存储 负载均衡 NoSQL
一文让你搞懂 zookeeper
一文让你搞懂 zookeeper
19352 16
|
分布式计算 监控 Hadoop
Hadoop任务执行失败
【7月更文挑战第12天】
650 10
|
消息中间件 Java 网络架构
在Spring Boot中实现微服务间的通信策略
在Spring Boot中实现微服务间的通信策略
|
物联网 定位技术 API
IoT 设备定位服务:GPS,移动基站、WiFi
IoT企业物联网平台提供基于GPS,移动基站、WiFi热点的定位服务
4274 1
IoT 设备定位服务:GPS,移动基站、WiFi
|
前端开发 JavaScript 中间件
Vue 2.x折腾记 - (12) Nuxt.js写一个校验访问浏览器设备类型及环境的中间件
这个需求非常常见,分享出去的页面的有时候在手机访问,有时候别人是PC打开的; 若是不是共享同一个页面的情况,就需要拦截跳转了; 当然你要共享同一个页面也可以(放大化到PC也需要添加某些CSS,也需判断设备)
602 82
|
存储 传感器 网络协议
《物联网技术》课程笔记——第二章 物联网技术架构
《物联网技术》课程笔记——第二章 物联网技术架构
|
人工智能 前端开发 Java
软件测试/人工智能|熟练使用web控件定位技巧,提升测试工作效率!
软件测试/人工智能|熟练使用web控件定位技巧,提升测试工作效率!