我做了一些研究,但是没有找到我想要的答案。在Spring中,DAO和服务类被声明为接口。实现接口的类通常是单例Java Bean。问题:您是否看到任何理由让我将不依赖实例变量的私有方法设为静态?为什么? 例如,我在DAO类中有几个私有方法,这些私有方法将数据库数据转换为域对象,而这些私有方法不使用实例变量。我了解有些人可能建议我将其提取到实用程序中。
答案 0 :(得分:2)
单个单词 singleton 的使用方式多种多样,可能会引起一些混乱。 “硬”(物理的,基于类的JVM)单例是确保通常通过枚举或常量确保整个JVM中仅存在一个实例的类。如果对象完全具有任何状态或配置,则应避免这种模式,因为这会导致应用程序各部分之间的意外耦合。 (如果对象表示一个纯函数(例如CASE_INSENSITIVE_ORDER
或一个值,通常就可以了)。
相反,单例作用域的bean(逻辑的,基于容器的)仅意味着管理它的容器将保留一个共享实例,并将其提供给所有想要的共享实例(例如,而不是创建每个消费者的单独私人副本)。在大多数Spring应用程序中,实际上最好使用Java接口来实现两侧的协定,因此方法不能是静态的。
关于性能问题,static
带有意思-具体来说,方法或字段与该类的特定实例没有关系。在含义适当时(例如Math
中的大多数方法)使用它,并且不要出于任何理论上的性能原因而以这种方式更改代码的含义。>