2014-11-25 67 views
0

目前,我正在使用Spring框架編寫我的第一個應用程序。在我的項目過程中,我得到了幾條建議/建議。如何使用Spring MVC編寫項目?

  • 第一條建議涉及注入一個對象。我曾使用註解@Autowired,但我聽說更好的注入方法是使用註釋@Inject。我知道這兩個註釋實際上是相同的。但@Inject是Java JSR標準註釋,因此使用標準註釋比非標準註釋更好。

    那麼,使用Autowired Inject會更好嗎?

  • 第二條建議是關於使用JPA API而不是Hibernate API。例如:我們可以使用EntityManager而不是SessionFactory。

    那麼,使用JPA代替Hibernate API會更好嗎?

  • 我得到的第三條建議是我們不能傳遞實體對象來查看,但我們必須傳遞bean。 例如:如果我有一個Employee實體類,則必須編寫一個EmployeeBean類將其傳遞給視圖。在教程link中, 作者爲實體和bean編寫了一種特殊的轉換方法。 我聽說這個解決方案更安全,因爲當我們直接在控制器中使用實體對象來傳遞視圖時,我們可能會意外地更改數據庫中的值。

我們可以創建一個特殊的bean轉移到認爲,而不是使用實體?

+2

那麼,你的問題是什麼? – 2014-11-25 09:41:12

+0

我的帖子中有三個問題。使用Autowired Inject更好嗎?使用JPA代替Hibernate API Api會更好嗎?可以創建特殊的bean來轉移到視圖,而不是使用實體? – 2014-11-25 09:44:43

+0

@TheNightmare:請訪問http://stackoverflow.com/help/privileges/edit。它表明我們可以在stackoverflow中編輯帖子。 – 2014-11-25 10:13:43

回答

2

對此沒有確切的答案。然而,在我看來,你的前兩個問題@Inject vs @Autowired,JPA vs Hibernate,具有相同的決策路徑。 @Inject是一個標準的Java EE 6(JSR-299)註釋,@Autowired是Spring專有的。以同樣的方式,JPA是一個規範,Hibernate只是規範的一個實現,但你可以使用hibernate的特定概念編寫持久層(SessionFactory而不是EntityManager)

在這兩種情況下,遵守規範都會讓你的代碼更加可移植的,例如你的代碼應該在一系列兼容的服務器上工作。另一方面,供應商特定的實現發展更快,通常提供更多。那裏沒有普遍的對或錯的選擇。

關於你的第三個問題,它是一個不同類型的辯論。經常討論,你可以通過https://softwareengineering.stackexchange.com/questions/198520/entity-to-dto-usage

+1

關於hibernate API與JPA API的關係,實際上,JPA API的發展往往比專有的Hibernate API更爲頻繁。例如,JPA的Criteria API允許做比Hibernate更多的事情。我認爲Hibernate本身認爲自己的專有API是遺留的,我聽說Emmanuel Bernard本人(核心Hibernate開發人員之一)推薦使用JPA API。 – 2014-11-25 10:03:43

+1

好評。儘管如此,我認爲它很罕見,幾乎是個例外。 JPA/Hibernate可能是我所知道的最緊密的規範/供應商關係,AFAIK Hibernate開發人員寫了大部分規範。儘管如此,你所說的「Hibernate本身認爲自己的專有API是遺留的」聽起來令人驚訝 – 2014-11-25 10:13:21

+1

「遺產」我的意思是:仍然支持,但不推薦,除非沒有JPA等價物存在。 – 2014-11-25 10:16:31