在 java 中,服务类应该是单例吗?
2022-09-04 21:29:03
在设计服务类时,它应该是java中的单例吗?通常 DAO 是单例的,那么调用的服务类也应该成为单例吗?
在设计服务类时,它应该是java中的单例吗?通常 DAO 是单例的,那么调用的服务类也应该成为单例吗?
恕我直言,是的,服务不应该保持状态,因此应该成为单例。
单例是坏的,如果你开发它们。如果使用依赖关系注入,请让 DI 容器处理服务对象的单一实例性质。如果不使用依赖关系注入,请使用静态方法而不是单例。
坏的典型例子:
public class HootUtility // singleton because developer was a goofball.
{
...
public void blammy(...) { ... }
public HootUtility getInstance() { ... }
}
... somewhere in the code.
HootUtility.getInstance().blammy(...); // This is silly.
更好地实现上述内容:
public class HootUtility // Not a singleton because I am not a ______. (fill in the blank as you see fit)
{
// You can limit instantiation but never prevent instantiation.
// google "java reflection" for details.
private HootUtility()
{
throw new UnsuppotedOperationException();
}
public static void blammy(...) { ... }
}
... somewhere in the code.
HootUtility.blammy(...);
如果您有一个具有具体实现的服务接口,请使用依赖关系注入框架来注入实现(DI 框架包括:spring 和 guice)。
编辑:如果我使用弹簧,我会选择单例范围(默认值)。