@Singleton和@ApplicationScoped的区别

本文涉及的产品
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 在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使用实践详解
809 0
|
存储 缓存 Java
Infinispan篇(一):一个被遗忘了的分布式集群缓存系统
Infinispan 是一个开源内存数据网格,提供灵活的部署选项和强大的数据存储、管理和处理功能。
2385 0
|
Java 开发者 Spring
探索Spring Boot中的原则:约定大于配置
在软件开发领域,简化和提高开发效率一直是追求的目标。而"约定大于配置"(Convention Over Configuration)正是一种理念,旨在通过默认约定和规则来减少开发人员需要做的配置工作。在Spring Boot框架中,这一原则得到了充分应用,帮助开发者更快地构建高效的应用程序。本文将深入探讨"约定大于配置"的概念、优势以及在Spring Boot中的实践。
2115 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 等。
4027 0
使用 Prometheus + Grafana 监控 k8s 上的 Spring Boot 应用
|
移动开发 前端开发 JavaScript
前端vue2、vue3去掉url路由“ # ”号——nginx配置(一)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
922 0
|
Kubernetes Cloud Native Java
探索Quarkus:Java的新一代高性能轻量级框架
探索Quarkus:Java的新一代高性能轻量级框架
4974 3
|
Java API Maven
告别漫长重启时代:Quarkus热部署功能让你的代码改动瞬间生效,提升开发效率的秘密武器揭秘!
Quarkus是一款备受开发者青睐的开源框架,以其轻量级、高性能及出色的云适应性著称。其内置的热部署功能让开发者能在不重启应用的情况下实时预览代码修改效果,显著提升开发效率。本文将深入解析Quarkus热部署的工作原理,并通过示例演示如何启用和使用该功能。首先确保已安装Java 11及以上版本和Maven,然后按照指引创建并运行一个Quarkus项目。通过修改RESTful API端点的返回值,我们可以直观地看到热部署带来的即时效果,从而体验到这一功能为开发流程带来的巨大便利。这对于追求高效开发的技术团队而言,无疑是强大的助力。
308 1
|
JSON JavaScript 前端开发
Jackson学习笔记
这篇文章是关于Jackson库的学习笔记,提供了Jackson工具包的下载方法,如何在IDEA中使用Maven导入Jackson依赖,以及如何在SpringMVC中使用Jackson进行JSON数据的转换和处理。
Jackson学习笔记