为什么业务对象是单例的?

时间:2016-10-28 16:33:25

标签: java singleton

在我所使用的所有企业/ Web应用程序中,我看到业务/服务对象(包含业务逻辑的类)是单例的。

我的问题是,通过使它们成为单身人士,我们获得了哪些优势?我只能想到一个原因,即一次又一次地需要Service对象,并且包含其他几个依赖项。因此,一次又一次地创建这些对象可能有点成本(时间明智)。这是对的吗?

2 个答案:

答案 0 :(得分:0)

每个对象创建都涉及堆内存中的一些成本,并且我们不为不保持任何状态的类创建多个对象(即,它们是无状态的)

  

服务,控制器和DAO不携带/保持任何状态(数据),   所以我们为这些类实现了Singleton。

     

Form Beans / Command Classes / DTO / VO对象保存数据的地方和我们   每个请求创建一个(他们不是单身人士)。

通过让他们成为单身人士获得的优势是什么?

保存内存,否则很快,根据配置的堆大小,我们可能会进入“OutOfMemoryException”。

我只能想到一个原因,即一次又一次地需要Service对象,并且包含其他几个依赖项。因此,一次又一次地创建这些对象可能有点成本(时间明智)。这是正确的吗?

不,这不是因为依赖性,而是因为它们不包含任何状态(数据),并且它们在内存和数据方面都很昂贵。时间,如果我们为每个请求创建一个对象。

在企业/ Web应用程序中,如果要为类实现单例(例如service / controller / DAO / etc ..),那么该类必须是线程安全的。

答案 1 :(得分:0)

是的!对象的初始化是昂贵的!因此,最好只为所有应用程序生命周期创建一个实例!