@Singleton和@ApplicationScoped的区别

本文涉及的产品
云原生网关 MSE Higress,422元/月
可观测监控 Prometheus 版,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 在JakartaEE的CDI标准中@Singleton和@ApplicationScoped的区别

@Singleton和@ApplicationScoped都是应用范围的bean,主要区别在于:

@Singleton:

  1. bean的实例在第一次注入时创建,之后始终使用同一个实例。
  2. 可以直接访问bean的字段,因为始终是同一个实例。
  3. 不支持mock,因为没有代理可以拦截方法调用。
  4. 略微更高的性能,因为没有代理的开销。

@ApplicationScoped:

  1. bean的实例在第一次方法调用时创建,注入点注入的是一个代理。
  2. 不能直接访问bean的字段,需要通过方法调用,因为注入的是一个代理。
  3. 支持mock,可以使用Mockito或Quarkus Mock来mock @ApplicationScoped bean。
  4. 可以在运行时重新创建实例,注入点无需变化,因为注入的一直是代理。
    所以,总体来说:

如果需要直接访问bean的状态,选择@Singleton。

如果需要mock或在运行时重新创建实例,选择@ApplicationScoped。

除非有明显的性能要求,否则推荐默认使用@ApplicationScoped,因为它更灵活和易测试。只有当直接访问bean状态或有较高的性能要求时,才使用@Singleton。

两者的其他方面,如作用域、代理、延迟初始化等行为都是相同的。所以除上述区别外,在大多数情况下可以互换使用。

目录
打赏
0
0
0
0
0
分享
相关文章
Infinispan篇(一):一个被遗忘了的分布式集群缓存系统
Infinispan 是一个开源内存数据网格,提供灵活的部署选项和强大的数据存储、管理和处理功能。
2187 0
探索Spring Boot中的原则:约定大于配置
在软件开发领域,简化和提高开发效率一直是追求的目标。而"约定大于配置"(Convention Over Configuration)正是一种理念,旨在通过默认约定和规则来减少开发人员需要做的配置工作。在Spring Boot框架中,这一原则得到了充分应用,帮助开发者更快地构建高效的应用程序。本文将深入探讨"约定大于配置"的概念、优势以及在Spring Boot中的实践。
1799 0
探索Quarkus:Java的新一代高性能轻量级框架
探索Quarkus:Java的新一代高性能轻量级框架
4442 3
解锁极致性能:Quarkus如何让JVM应用调优变得前所未有的简单与高效!
Quarkus是一款专为GraalVM和OpenJDK设计的Kubernetes Native Java框架,采用AOT编译技术将Java应用转化为本地代码,大幅提升启动速度与运行效率。它简化了性能调优流程,如自动优化垃圾回收、类加载、内存管理及线程管理等,使开发者无需深入理解JVM细节即可轻松提升应用性能。与传统JVM应用相比,Quarkus显著降低了性能调优的复杂度。
249 2
|
10月前
|
告别漫长重启时代:Quarkus热部署功能让你的代码改动瞬间生效,提升开发效率的秘密武器揭秘!
Quarkus是一款备受开发者青睐的开源框架,以其轻量级、高性能及出色的云适应性著称。其内置的热部署功能让开发者能在不重启应用的情况下实时预览代码修改效果,显著提升开发效率。本文将深入解析Quarkus热部署的工作原理,并通过示例演示如何启用和使用该功能。首先确保已安装Java 11及以上版本和Maven,然后按照指引创建并运行一个Quarkus项目。通过修改RESTful API端点的返回值,我们可以直观地看到热部署带来的即时效果,从而体验到这一功能为开发流程带来的巨大便利。这对于追求高效开发的技术团队而言,无疑是强大的助力。
247 1
当 Quarkus 遇上 Spring Boot,谁才是现代云原生应用的终极之选?究竟哪款能助你的应用傲视群雄?
Quarkus 和 Spring Boot 均为构建现代云原生应用的热门框架,旨在简化开发流程并提升性能。Spring Boot 依托庞大的 Spring 生态系统,提供开箱即用的体验,适合快速搭建应用。Quarkus 由红帽发起,专为 GraalVM 和 HotSpot 设计,强调性能优化和资源消耗最小化,是云原生环境的理想选择。
582 3
Jackson学习笔记
这篇文章是关于Jackson库的学习笔记,提供了Jackson工具包的下载方法,如何在IDEA中使用Maven导入Jackson依赖,以及如何在SpringMVC中使用Jackson进行JSON数据的转换和处理。
Jackson学习笔记
IDEA插件-Power Mode II键盘炫酷效果
Power Mode II 是一款为 IntelliJ IDEA 设计的插件,旨在为编码过程增添动感和趣味性。这款插件通过在代码编写时添加视觉特效、声音效果和其他动态元素,为开发者提供了一个独特且富有创意的编程体验。
888 0
IDEA插件-Power Mode II键盘炫酷效果

云原生

+关注
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等