考虑以下类的结构:
BaseDAO
使用方法来填充PreparedStatement并从池中获取连接AccountDAO extends BaseDAO
通过JDBC使用Account
表。这个类是单身AccountService
女巫调用AccountDAO的方法,如下所示:
AccountDAO.getInstance().login(name, password).
AccountDAO
是一个Spring bean,对插入一些数据的方法有@Transactional
注释。
这样好吗?我认为单例DAO类可能会导致性能问题。可能最好在服务层类中使用一些弹簧注入? (我是Spring的新手,所以任何建议都会受到关注)
答案 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部分会帮助你。