java - 有什么理由将 Spring 单例 bean 中的私有(private)方法设为静态吗?

标签 java spring performance singleton static-methods

我做了一些研究,但没有找到我正在寻找的答案。在Spring中,DAO和服务类被声明为接口(interface)。实现接口(interface)的类通常是单例 Java bean。问题:您认为我应该将不依赖实例变量的私有(private)方法设为静态吗?为什么? 例如,我在 DAO 类中有几个私有(private)方法将数据库数据转换为域对象,并且这些私有(private)方法不使用实例变量。我知道有些人可能建议我将它们提取到实用程序中。

最佳答案

单例一词有多种使用方式,这可能会引起一些困惑。 “硬”(物理的、基于类的、JVM)单例是一种通常通过枚举或常量确保整个 JVM 中只能存在一个实例的类。如果对象具有任何状态或配置,则应避免此模式,因为这可能会导致应用程序各部分之间出现意外耦合。 (如果对象表示纯函数(例如 CASE_INSENSITIVE_ORDER)或值,通常没问题。)

相比之下,单例范围的bean(逻辑上的,基于容器的)仅仅意味着管理它的容器将保留一个共享实例并将其提供给所有需要一个共享实例的消费者(而不是,例如,创建为每个消费者提供单独的私有(private)副本)。在大多数 Spring 应用程序中,实际上首选实现一个 Java 接口(interface)来充当双方之间的契约,因此方法不能是静态的。

对于性能问题,static 具有含义——具体来说,方法或字段与该类的特定实例没有关系。当含义合适时使用它(例如Math中的大多数方法),并且不要出于任何理论上的性能原因以这种方式更改代码的含义.

关于java - 有什么理由将 Spring 单例 bean 中的私有(private)方法设为静态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53952220/

相关文章:

java - Spring 尝试反序列化为 LinkedHashMap 而不是 POJO

java - 如何使用结果集格式化和显示数据库中的日期

java - Spring MVC : How to correctly create the entity for following JSON response

java - 无法将 camunda-bom 添加到 springboot 项目

java - 耶拿 SDB 连接错误

java - Spring Boot 使用模板引擎的麻烦

java - Spring REST @RequestBody 总是空的

iphone - 核心数据模式 : how to efficiently update local info with changes from network?

mysql - 如何高效地一次获取数据并统计行数?

java - Android WebView 加载速度太慢