单例类在Web服务中的作用

时间:2013-04-11 05:12:08

标签: java web-services singleton

我正在实施一个Web应用程序并提供很少的其他API。

以下是我的网络应用程序的结构。

服务层
服务类包含不同的API。

它调用 DAO ,这是单例类(我宁愿说它是枚举,并且只为< strong> Enum )并且它没有任何状态。我的意思是DAO图层类中没有实例变量。

DAO图层
DAO类提取数据库连接(数据库连接是通过枚举类提供的,我在实例化枚举时创建了连接),以及它在DB上执行相应的查询。

所以应用程序架构是这样的。

ServiceClass {
    Dao.operation()
}

DaoEnum {

    instance;

    operation() {
        DBConnectionEnum.instance.connection.preparedStmt.respective operation
    }
}

DBConnectionEnum {
    DBConnectionEnum() {
        grabDBConnection()
    }
}

我知道我必须使用连接池来获取数据库连接,但是我无法理解Dao层造成的影响,这是单例。

你能否告诉我它是否是正确的设计,还是会耗尽应用程序?可以使应用程序更加健壮,快速和高效地进行哪些改进?

2 个答案:

答案 0 :(得分:0)

单身设计模式本身就是一个很好的模式,否则就不会持续这么长时间。有一些drawbacks,就像将全局状态引入您的应用程序一样。但我不认为这些缺点足以打折它。然而,有更好的方法来做你想做的事情。 Dependency Injection是从实现中抽象调用的一种方法。您甚至可以在DI实现中使用Singleton,只要它在调用时是透明的。我强烈建议您对DI做一些研究。

答案 1 :(得分:0)

我正和我的同事讨论这个问题,根据讨论,我认为我的单身DAO层不会对我造成任何问题。

由于DAO层是DB和Service类之间的中介,DAO层不维护任何状态。因此,当同时调用2个类似的请求时,两个请求将在2个不同的线程中提供,每个线程将维护自己的堆栈。当两个请求都调用DAO层时,这些请求将只调用DAO层的方法,该方法将与相应线程的堆栈相关联。

因此,如果我在我的应用程序中创建Singleton DAO层以提供多个Web请求,则不会耗尽吞吐量,并且必须毫无问题地提供客户端。

希望我没有意义。 :)