@Singleton和@ApplicationScoped的区别

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,182元/月
可观测可视化 Grafana 版,10个用户账号 1个月
云原生网关 MSE Higress,422元/月
简介: 在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。

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

目录
相关文章
|
XML JSON Java
SpringMVC中HttpMessageConverter使用实践详解
SpringMVC中HttpMessageConverter使用实践详解
819 0
|
存储 缓存 Java
Infinispan篇(一):一个被遗忘了的分布式集群缓存系统
Infinispan 是一个开源内存数据网格,提供灵活的部署选项和强大的数据存储、管理和处理功能。
2403 0
|
Web App开发 前端开发 Java
SpringBoot默认200个线程对于Websocket长连接够用吗?(一)
上篇推文从源码剖析SpringBoot中Tomcat的默认最大连接数中我们知道,SpringBoot的内嵌Tomcat默认的最大连接数为200。那么,这个默认值对于项目中引入了WebSocket使用长连接后,是否足够用呢?今天强哥就带大家一起从源码的角度来分析一下。
SpringBoot默认200个线程对于Websocket长连接够用吗?(一)
|
Prometheus 监控 Kubernetes
使用 Prometheus + Grafana 监控 k8s 上的 Spring Boot 应用
本文主要介绍如何使用 Prometheus 和 Grafana 可视化监控运行在 k8s 上的 Spring Boot 应用,监控指标包括 CPU、内存、线程信息、日志信息、HTTP 请求、JVM 等。
4045 0
使用 Prometheus + Grafana 监控 k8s 上的 Spring Boot 应用
|
移动开发 前端开发 JavaScript
前端vue2、vue3去掉url路由“ # ”号——nginx配置(一)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
935 0
|
Java API Maven
告别漫长重启时代:Quarkus热部署功能让你的代码改动瞬间生效,提升开发效率的秘密武器揭秘!
Quarkus是一款备受开发者青睐的开源框架,以其轻量级、高性能及出色的云适应性著称。其内置的热部署功能让开发者能在不重启应用的情况下实时预览代码修改效果,显著提升开发效率。本文将深入解析Quarkus热部署的工作原理,并通过示例演示如何启用和使用该功能。首先确保已安装Java 11及以上版本和Maven,然后按照指引创建并运行一个Quarkus项目。通过修改RESTful API端点的返回值,我们可以直观地看到热部署带来的即时效果,从而体验到这一功能为开发流程带来的巨大便利。这对于追求高效开发的技术团队而言,无疑是强大的助力。
309 1
|
Kubernetes Cloud Native Java
探索Quarkus:Java的新一代高性能轻量级框架
探索Quarkus:Java的新一代高性能轻量级框架
5000 3
|
JSON JavaScript 前端开发
Jackson学习笔记
这篇文章是关于Jackson库的学习笔记,提供了Jackson工具包的下载方法,如何在IDEA中使用Maven导入Jackson依赖,以及如何在SpringMVC中使用Jackson进行JSON数据的转换和处理。
Jackson学习笔记
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
414 5