单例DAO对象可以吗?

考虑以下类的结构:

  1. BaseDAO使用方法来准备PreparedStatement并从池中获取连接
  2. AccountDAO extends BaseDAO以通过JDBC使用Account表。 这个class是单身
  3. AccountService女巫调用AccountDAO的方法如下: AccountDAO.getInstance().login(name, password).

AccountDAO是一个带有@Transactional注释的Spring bean,用于插入一些数据的方法。

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

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注入您的服务或您需要使用它们的任何地方。

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

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