dao 作为 servlet 的成员 - 正常吗?

Posted

技术标签:

【中文标题】dao 作为 servlet 的成员 - 正常吗?【英文标题】:dao as a member of a servlet - normal? 【发布时间】:2011-02-18 23:40:13 【问题描述】:

我猜,DAO 是线程安全的,不使用任何类成员。

那么它可以毫无问题地用作 Servlet 的私有字段吗?我们只需要一份副本,并且

多个线程可以同时访问它,为什么还要创建一个局部变量,对吧?

【问题讨论】:

如果你使用的DAO是线程安全的,它可以作为servlet中的成员变量使用,没有任何问题。 在我看来它是线程安全的。 DAO 仅包含注入一次的 SessionFactory,传递给方法的参数不会在方法内的任何地方发生变化。 就像我说的,如果你 100% 确定你的 DAO 是线程安全的,你可以在 Servlet 中使用它作为成员变量。 您可能会发现这篇文章及其后续 JSP/Servlet 文章很有用:DAO tutorial - the data layer。 【参考方案1】:

“DAO”只是数据库抽象类的总称。它们是否是线程安全的取决于具体的实现。

这个不好的例子可以称为 DAO,但是如果多个线程同时调用 insert 方法,就会给你带来麻烦。

class MyDAO 
     private Connection connection = null;

     public boolean insertSomething(Something o) throws Exception 
          try 
              connection = getConnection()
              //do insert on connection.
           finally 
              if (connection != null) 
                  connection.close();
              
          
     

所以答案是:如果你的 DAO 正确处理连接和事务,它应该可以工作。

【讨论】:

以上是关于dao 作为 servlet 的成员 - 正常吗?的主要内容,如果未能解决你的问题,请参考以下文章

Servlet通过 @Autowired注入service后事务失效,但是controller其它注入service事务正常,求指正

带有 Servlet、JSP 和 MySQL 的 Java 中的 CRUD Web 应用程序,没有 DAO

java中如何调用DAO

不使用注解和使用注解的web-service-dao结构

Spring Service Bean 作为 Servlet

jsp+servlet+javaBean+Dao