在没有 Spring Boot 应用程序的情况下使用 Spring Data JPA
Posted
技术标签:
【中文标题】在没有 Spring Boot 应用程序的情况下使用 Spring Data JPA【英文标题】:Use Spring Data JPA without Spring Boot application 【发布时间】:2018-07-12 17:59:34 【问题描述】:我想知道是否可以在没有 Spring 框架的其余部分的情况下使用 Spring Data JPA?我在另一个项目的 Spring Boot Web 应用程序中使用了 Spring Data JPA,并且非常喜欢它的易用性。
现在我和一些朋友有一个没有服务器的桌面应用程序的小项目,并且真的很想使用 Spring Data JPA,但我没有在任何地方找到关于是否可以在没有 Beans 或 Spring 框架的其余部分的情况下使用它的信息。
这是可能的还是我应该尝试使用另一个 JPA?
【问题讨论】:
没有弹簧芯,没有。没有 Spring Boot,是的。 是的。 Spring Data 不依赖于 Spring Boot 可以在非web项目中使用SpringBoot java2novice.com/spring-boot/standalone-application 我认为也应该可以将 spring boot 用于桌面应用程序。其次,“另一个 JPA”不是 Spring Data JPA 的替代品,而是 Boot 在后台使用的 Hibernate。 【参考方案1】:从你的问题来看,我怀疑对 Spring + Java 持久化生态系统存在一些误解:
你可以在没有 Spring Boot 的情况下使用 Spring Data JPA(你需要使用 Spring Core,因为它是 Spring Data JPA 依赖项),但这对我来说没有多大意义,因为 Spring Boot 给了你很多方便的魔法和语法糖。 Spring + Spring Boot 生态系统主要针对 Web 应用程序量身定制,但也可用于非面向 Web 的应用程序。如果您正在编写桌面应用程序,您可能会使用一些桌面平台(例如 Eclipse RCP)。这些通常不适用于 Spring 的依赖注入。您仍然可以使用其他孤立的 Spring + Spring Boot 功能,但是您缺少重要的 Spring + Spring Boot 主干 -> IoC 容器。 Spring Data JPA 不是 JPA 提供者。它只是 JPA 标准之上的便利层,可以轻松地将 JPA ORM 插入 Spring 应用程序。它还使用来自 Spring Data 项目系列的类似模式,使 Spring 开发人员易于使用各种持久性存储。 如果您希望使用 JPA(独立于 Spring 生态系统的 JEE 标准 API),您绝对可以使用一些 ORM(例如 Hibernate、Toplink) 使用 JPA (javax.persistence) API,完全没有 Spring。因此,要回答您的问题,您有两种选择:
-
如果您正在使用某种 Java 桌面框架(例如 Eclipse RCP 或基于 OSGi 的东西),则根本不要使用 Spring。您可能希望将 Toplink(来自 Eclipse 社区)或 Hibernate 与 JPA API 一起使用。
如果您正在做的桌面应用程序可以利用 Spring IoC,那么一定要使用没有 Web 功能的 Spring + Spring Boot + Spring Data JPA 组合。
【讨论】:
非常感谢您的广泛回答 :) 我想我会考虑更多地研究 Spring IoC,还没有对 Spring 做太多事情,但是当我研究纯 Hibernate 时,我有点失望的,当我查阅了几个教程时,它们都使用 XML 进行了配置,因为我真的很想在纯 java 中做尽可能多的事情。非常感谢! 我有一个不使用 Spring 的 Web 应用程序。有没有办法在我的应用程序中获取从方法名称派生的查询?这是我想要从春季数据中获得的唯一方面。 @jkerak,没有。 @luboskrnac 是的,Spring Data JPA 可能是这样,但我最终发现“Apache Deltaspike Data”库(使用 Weld 进行 CDI 和 Hibernate 进行 JPA)是 Spring Data 的一个不错的替代品在我的非弹簧应用程序中。 该项目没有使用 Spring IoC,而是依赖于 CDI,CDI 也是使用 IoC 模式,但它是 JacartaEE(前 JavaEE)标准。您将使用类似于 Spring 的东西,但不太常见。【参考方案2】:Spring Data 在 Spring Framework 上中继。所以没有 Spring 框架就无法使用它。
但是您可以在独立应用程序中使用 Hibernate。
【讨论】:
【参考方案3】:Apache DeltaSpike Data 模块提供与 Spring Data JPA 类似的功能(扩展存储库接口,按约定查询),而不需要 Spring。您只需要提供 CDI 和 JPA 实现(例如,Weld 和 Hibernate 就可以)
【讨论】:
以上是关于在没有 Spring Boot 应用程序的情况下使用 Spring Data JPA的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在不重新启动应用程序的情况下使 NSBundle 本地化缓存失效? [iOS]
是否可以在没有 BackgroundWorker 的情况下使 WinForms 响应? [关闭]