java - 在 dao 中集成 hibernate 和 spring 而没有 spring 依赖

标签 java spring hibernate

当我们将 hibernate 与 spring 集成时,我们通常通过 @Repository spring 注释实现基于注释的方法。我了解到这样做的目的是,为了消除我们 dao 中的 spring 依赖性,并且由于 hibernate3 支持上下文 session 来管理 session

@Repository
public class HibernateSpitterDao implements SpitterDao{

privateSessionFactorysessionFactory;

@Autowired
public HibernateSpitterDao(SessionFactory sessionFactory){
  this.sessionFactory=sessionFactory;
}

private SessioncurrentSession(){
  return sessionFactory.getCurrentSession();
}
...
}

例如,如果我们不使用基于注释的方法,我们的 dao 将直接依赖于 spring 特定类,例如需要扩展 HibernateDaoSupport。

但即使有注释,DAO 仍然依赖于 Spring 知道吗?因为 @Repository 是 spring 注解。我们不能完全独立于 spring 知道吗?它更像是依赖于 spring 注释比依赖于 spring 类更好,是吗?

我只是在想好吧,一段时间后我们需要用其他东西来切换 spring。在那种情况下,如果我们的 DAO 对 spring 的依赖为零,我们根本不需要接触我们的 DAO。

最佳答案

要实现完全解耦,您将不得不摆脱注释,正如您已经发现的那样。或者,您必须使用基于 XML 的 spring 配置,或者创建一个 @Configuration构建 bean 工厂的类(也称为基于 java 的配置)。

我只是想对你的想法发表评论。花时间在一个完全解耦的解决方案上,原因是“也许在未来的某个时候我们会想要切换”对我来说听起来浪费了很多时间。您是否有任何理由怀疑或假设这种转变会在可预见的 future 或永远发生?很明显,您的解耦是有代价的。您将不得不维护 XML 文件和/或配置类,而不是易于查看的注释,这两者往往会变得相当复杂并且在一段时间后难以概览。

关于java - 在 dao 中集成 hibernate 和 spring 而没有 spring 依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12243459/

相关文章:

java - 获取意外 token : Postman post request

java - MapReduce不产生输出

spring for mongodb转义参数以避免SQL注入(inject)

java - Spring Maven 应用程序中的单个无状态 Servlet

java - jar(war)压缩有什么优点?

java - org.hibernate.MappingException 似乎无缘无故发生

java - 在生产环境中运行 Apache Geronimo

java - 我可以使用 .xml < context-param > 作为 .as 类中的常量吗?

mysql - OSGi 和 Hibernate - 不合适的驱动程序

java - 具有复合键的单边 OneToMany 也是外键,应该使用 @IdClass 还是 @Embeddable?