单例DAO对象可以吗?

时间:2010-10-14 21:02:25

标签: java spring dao

考虑以下类的结构:

  1. BaseDAO使用方法来填充PreparedStatement并从池中获取连接
  2. AccountDAO extends BaseDAO通过JDBC使用Account表。这个类是单身
  3. AccountService女巫调用AccountDAO的方法,如下所示: AccountDAO.getInstance().login(name, password).
  4. AccountDAO是一个Spring bean,对插入一些数据的方法有@Transactional注释。

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

2 个答案:

答案 0 :(得分: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连接到您的服务或您需要使用它们的任何地方。

答案 1 :(得分:0)

我对Spring不太熟悉,但一般来说,您不希望从多个线程访问与数据源的连接。可能是O.K.如果你配置它,以便DAO对象是线程上下文中的伪单例,但不跨线程共享。大多数IoC容器允许您通过配置执行此操作。

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