2010-10-14 44 views
8

考虑下面的类的结构:单身DAO对象可以吗?

  1. BaseDAO与方法到波峰的PreparedStatement并从池
  2. AccountDAO extends BaseDAO连接通过JDBC与Account表工作。这个类是单
  3. AccountService巫调用AccountDAO的方法是这样的: AccountDAO.getInstance().login(name, password).

AccountDAO是一个Spring bean与@Transactional注释是插入一些数据的方法。

可以吗?我认为单身DAO课程可能会导致性能问题。可能是最好在服务层类中使用一些弹簧注入? (我是Spring的新手,所以任何建议都会被调用)

回答

15

Spring文档中推荐的方法是将DAO编写为普通类并使用单例作用域。如果你的DAO没有保持状态,这将工作正常。

http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-scopes-prototype

3.4.2节。

如果你正在使用Spring,你不应该需要处理准备好的语句和什么,除非你正在做一些不可思议的事情。看看JdbcTemplate或HibnerateTemplate。是的,您应该联系Spring将您的DAO注入您的服务或任何您需要使用它们的地方。

0

我对Spring并不太熟悉,但一般而言,您不希望从多个线程访问到您的数据源的连接。这可能是O.K.如果将其配置为使DAO对象在线程上下文中是伪单例,但不会跨线程共享。大多数IoC容器将允许您通过配置完成此操作。

当然,这会带来有关数据一致性的其他考虑因素,您必须仔细管理这些因素。通常情况下,ORM部分将帮助你。