我正在制作 Java REST 应用程序。我想知道我应该如何实现我的服务 - 我应该为整个应用程序使用静态服务变量还是像在 Spring MVC 中那样将服务作为单例。单例对象和在应用程序中只初始化一次对象有什么区别吗?
3 回答
HUX布斯
那
TA贡献1876条经验 获得超6个赞
我应该为整个应用程序使用静态服务变量还是将服务作为单例
这取决于。你必须问自己两个问题才能找到答案:
那static variable
存储在哪里?
您有 2 个选择:
声明一个
final class Services
将所有可用服务保存为public static final
变量的变量。在每个服务类中创建一个
public static final
变量,称为INSTANCE
您会看到第一点将所有类都放在同一个位置。可能会聚集在一起,不可读且不易维护。
对于第二点,您几乎接近单例情况。
我需要懒惰或急切地初始化服务吗?
您再次有 2 个选项:
懒惰:使用静态持有者模式在第一次使用时懒惰地初始化单例
急切:
public static final
在服务类中创建一个变量,直接创建一个实例。
第一点有它的好处。如果您需要分配资源或需要执行任何其他“繁重”操作。这有效,并且是线程安全的
对于第二点,您会看到它就像第一个问题中的第二点。
结论
如前所述,这取决于用例。我可能会一直使用单身人士。因为所有关于它的状态和可用性的逻辑都保存在一个地方。
慕容708150
TA贡献1831条经验 获得超4个赞
如果你想要一些实用方法或常量变量,你应该选择 Static 而当一个类可以有状态并且状态可以改变(但对象仍然是一个)时,Singelton 就会出现。
白板的微信
TA贡献1883条经验 获得超3个赞
将服务创建为单例,这样您就可以在运行时获得更大的灵活性,因为您可以在不更改代码的情况下注入服务的任何实现。如果您的想法是使用服务类共享一些变量,则将它们标记为最终变量。
添加回答
举报
0/150
提交
取消