【问题标题】:Can a singleton in spring have static methods?spring 中的单例可以有静态方法吗?
【发布时间】:2019-01-18 11:10:31
【问题描述】:

ComponentService 类型的 bean 和大多数其他 bean 类型默认是单例的。

在我的一个代码拉取请求中,我在 Component 中声明了一个静态方法,因为该方法没有修改任何类级别的变量。

我的代码审查员指出,由于该类无论如何都是一个 Singleton 并且将有一个单一引用,他说没有必要将方法设为 static,而是将其设为 instance 方法。

由于我的应用程序中的大多数类都是单例类,哪种方式是编写代码的正确方式?

【问题讨论】:

  • 您的意思可能不是public,而是instance 方法;毕竟你仍然可以拥有public static... 方法
  • 如果你想使用静态 util 方法,那么就这样做。单例的用例是拥有一个对象的单个实例,其功能通过其 instance(非静态)方法公开。
  • @Eugene 谢谢。已更正。

标签: java spring oop design-patterns singleton


【解决方案1】:

您的审阅者可能对此是正确的,在单例中声明静态方法几乎没有意义;除非此静态方法是返回单例实例本身的工厂方法。

我可以想到另外两个不在单例中声明静态方法的原因:在某些情况下,静态方法的测试更难,而且你真的会混淆这个单例的调用者。他/她可能会看到有一个静态方法,并且很难理解为什么要这样声明它,就我所见的这种方法而言,它需要额外的推理。

【讨论】:

  • 静态方法与实例没有真正的关联,无法访问实例状态,因此一开始就违背了使用单例模式的目的。
  • 同意。我对此的看法:它不一定是“错误的”,但它是非常规的,因此令人困惑。遵循约定是代码可维护性的一项资产。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
相关资源
最近更新 更多