2012-09-25 174 views
3

这是一个普遍问题,并不是特定于我当前的应用程序。Java:我们可以使用DAO作为单例实例吗?

在交通繁忙多线程应用程序中,有什么办法可以做到:假设有一个DAO包含一个方法updateData来更新数据库中的一些数据。

问题:

  1. 这是一个好的方法有DAO类的Singleton实例并访问它的方法updateData
  2. 或者我应该每次创建该DAO的新对象并调用方法updateData

回答

4

是的,这是绝对是一个好主意,以创建这种服务单,确保它不具有任何状态相关的问题时,被多个线程访问

我会标明这种DAO如春豆

+0

非常感谢,在我们的情况下,我们的DAO类已得到状态(实例变量),所以我想他们正在创造一个新对象DAO的每一次。 – Pawan

+0

取决于,如果该实例可以与多个线程共享,那么不需要那个(用于快速示例记录器),如果该成员变量与DAO状态有关(通常不是这种情况),那么您应该使用2 –

+4

一个DAO可以有成员变量,但这并不意味着他们有一个“状态”。只要确保这些变量的值在DAO方法的调用之间不发生变化,并且调用具有相同输入参数的两次单个方法返回相同的值。 –

3

你可以有一个DAO的单例实例,你只需要确保DAO是无状态的,但DAO应该是无状态的。

3

最好创建一个DAO实例并将其传递给需要它的类的构造方法。我倾向于避免单身人士,因为除其他外,他们使您的代码难以测试并隐藏依赖关系。

看看关于这个问题的答案:What is so bad about Singletons?

相关问题