Spring中的DAO和服务层:会话管理

Eug*_*neP 3 java spring hibernate

我是否正确理解DAO和服务层互连的原则?DAO执行基础对象的提取,比如来自db的id.

服务层使用DAO对象,并且可以在一个函数中调用多于一种DAO 方法.所以,服务层必须:

  1. 实例化DAO实现对象

  2. 根据需要调用DAO的多个方法

如果Dao实现了一个接口,那么DAO接口是否必须有一个方法setSessionFactory()

如何在Spring中声明性地标记:

  1. DAO对象

  2. 服务层方法和类整体

这样它可以提供所需的东西吗?

mat*_*t b 7

我很惊讶,没有其他人特别提到这一点,但具体实现的细节,如setSessionFactory()应该不会在你的DAO接口.通过在DAO接口中添加特定于Hibernate的类,您可以将DAO直接绑定到Hibernate.

使用接口和依赖注入的目的是允许您更改层(您的DAO)的实现细节(例如,您使用的ORM解决方案,或者您的数据来自Web服务与数据库)而不影响其他层.

如果添加setSessionFactory到DAO接口,那么使用此DAO的所有其他层都会意识到并且与数据访问是通过Hibernate完成的事实相关联.这与您尝试使用接口和依赖注入实现的目标正好相反.

  • +1我暗示了这一点,但你说的很好.我的DAO通常看起来像这样`类UserHibernateDAO扩展HibernateDAO实现UserDAO`,其中`HibernateDAO`是一个抽象类.然后,如果我需要一个`FileDAO`,我可以换掉锅炉板. (2认同)