2016-04-28 72 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

非常歡迎!樂於幫助 。 –