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