Java Webservices中单例类的作用

Java Webservices中单例类的作用,java,web-services,singleton,Java,Web Services,Singleton,我正在实现一个webapplication,并提供了一些restapi 下面是我的Web应用程序的结构 服务层 服务类包含不同的API 它调用DAO,DAO是一个单例类(我更愿意说它是一个枚举,并且只为枚举定义了一个实例),它没有任何状态。我的意思是DAO层类中没有实例变量 DAO层 DAO类获取DB连接(DB连接是通过Enum类提供的,我在实例化Enum时创建了连接),并在DB上执行各自的查询 所以应用程序架构是这样的 ServiceClass { Dao.operation() }

我正在实现一个webapplication,并提供了一些restapi

下面是我的Web应用程序的结构

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

它调用DAO,DAO是一个单例类(我更愿意说它是一个枚举,并且只为枚举定义了一个实例),它没有任何状态。我的意思是DAO层类中没有实例变量

DAO层
DAO类获取DB连接(DB连接是通过Enum类提供的,我在实例化Enum时创建了连接),并在DB上执行各自的查询

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

ServiceClass {
    Dao.operation()
}

DaoEnum {

    instance;

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

DBConnectionEnum {
    DBConnectionEnum() {
        grabDBConnection()
    }
}
我知道我必须使用connectionpool来获取db连接,但我无法理解Dao层(即单例)造成的影响


你能告诉我这是一个正确的设计,还是会耗尽应用程序?有什么改进可以使应用程序更加健壮、快速和高性能?

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

我与同事讨论了这个问题,根据讨论,我觉得我的单例DAO层一定不会给我带来任何问题

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

所以,如果我在我的应用程序中创建单例DAO层来服务多个web请求,它将不会耗尽吞吐量,并且必须毫无问题地服务于客户机


希望我没什么道理。:)

我的web应用程序非常简单,我不想被不需要的框架弄得乱七八糟。虽然你的建议是值得的,如果我正在实施巨大的应用程序。你能详细说明一下我的设计中的缺点吗?好吧,对于一个简单的程序来说,这就足够了。请记住,对于单例,一次只能处理一个请求。如果有多个请求进入,它们的线程将阻塞,直到单例可用。如果DAO查询花费的时间太长,这可能会成为一个问题。