2016-04-28 70 views
13

我想“真正”理解Spring框架。我对Spring Core(DI)和Spring MVC有了一些公正的理解。Spring Data JPA是JPA的一个实现吗?

对于数据部分,我现在专注于Spring Data JPA。据我所知,JPA是一个标准规范,其中有多个实现,Hibernate是着名的实现。

现在,当我开始使用Spring Data JPA时,我的印象是Spring Data JPA是JPA规范的独立实现的。原来我错了。

如果我正确理解,弹簧数据JPA是由弹簧,其在内部使用其他JPA提供商(实施例休眠)提供一个抽象层,因此通常它是这样的:

Application ---> Spring Data JPA --> Hiberate --> JDBC ----> DB

我的理解是正确?如果不是Spring Data JPA有误导性?它本身不是JPA提供者,它只是一个抽象层,在其他JPA provider之上工作。

我不确定我是否真的了解Spring框架或完全是一个复杂的框架?

任何人都可以请帮我理解吗?

+3

是的,它是一个令人误解的名字。是的,它不是JPA的提供者。是的,它只是一个抽象层。是的,人们经常在这里将问题标记为JPA,当他们指的是Spring Data JPA。 JPA还有许多其他的实现,它们各有优点 –

+1

似乎是正确的,除了抽象层次在我看来非常高。 [Spring Data JPA - 参考文档](http://docs.spring.io/spring-data/jpa/docs/current/reference/html/)。 –

+0

感谢您的回复。我相信在本质上,Spring使用“现有框架”,而不是它执行任何规范?我对么?这让我想知道Spring是一个着名的框架,当它仅仅使用现有的框架。 – CuriousMind

回答

26

我不认为它是错误的(声明:我是项目负责人)。所有Spring Data项目都以的名义列出了商店或API,它们是。春天JPA的数据基本上是春季数据 JPA,就像春天的数据MongoDB是春季数据 MongoDB的,就像Spring Batch的是批量应用春,Spring集成是集成项目春天

存在正确的依赖关系图的JPA:

Application -> Spring Data JPA -> JPA <- Hibernate -> JDBC -> DataSource 

-> — uses 
<- — implements 

同为MongoDB的:

Application -> Spring Data MongoDB -> MongoDB Java driver -> MongoDB 

等我仍然有兴趣在什么地方你得到的印象是春天的数据是JPA在JPA的实施中,既不是project page也不是reference documentation状态。事实上,尤其是project page对项目提供的功能非常明确。此外,它可能有助于研究description of the umbrella project,它试图为其中包含的所有模块设置一些基本上下文。

+3

非常感谢您的精彩解说,它清除了一切。这是我个人的解释,当他们说“Spring Data JPA”时,它可能是JPA的实现。我没有牢记这个疑点,并且在错误的假设事物上建立了知识,而是决定提出这个问题来澄清我的怀疑/理解。非常感谢! – CuriousMind

+2

非常欢迎!乐于帮助 。 –