在我所使用的所有企业/ Web应用程序中,我看到业务/服务对象(包含业务逻辑的类)是单例的。
我的问题是,通过使它们成为单身人士,我们获得了哪些优势?我只能想到一个原因,即一次又一次地需要Service对象,并且包含其他几个依赖项。因此,一次又一次地创建这些对象可能有点成本(时间明智)。这是对的吗?
答案 0 :(得分:0)
每个对象创建都涉及堆内存中的一些成本,并且我们不为不保持任何状态的类创建多个对象(即,它们是无状态的)
服务,控制器和DAO不携带/保持任何状态(数据), 所以我们为这些类实现了Singleton。
Form Beans / Command Classes / DTO / VO对象保存数据的地方和我们 每个请求创建一个(他们不是单身人士)。
通过让他们成为单身人士获得的优势是什么?
保存内存,否则很快,根据配置的堆大小,我们可能会进入“OutOfMemoryException”。
我只能想到一个原因,即一次又一次地需要Service对象,并且包含其他几个依赖项。因此,一次又一次地创建这些对象可能有点成本(时间明智)。这是正确的吗?
不,这不是因为依赖性,而是因为它们不包含任何状态(数据),并且它们在内存和数据方面都很昂贵。时间,如果我们为每个请求创建一个对象。
在企业/ Web应用程序中,如果要为类实现单例(例如service / controller / DAO / etc ..),那么该类必须是线程安全的。
答案 1 :(得分:0)
是的!对象的初始化是昂贵的!因此,最好只为所有应用程序生命周期创建一个实例!