2008-08-12 89 views
26

我目前正在嘗試使用Spring框架進入Java EE開發。由於我是Spring的新手,很難想象一個好的運行項目應該如何開始。第一個Java EE Spring項目的「最佳實踐」是什麼?

你有任何最佳實踐,對於入門的竅門或重大DO組合這些?您是如何從Spring開始的 - 大型項目還是小型教程式應用程序?你現在使用哪種技術:AOP,複雜的休眠...

+0

它是否必須同時存在?如果你對這兩者都不熟悉,那麼一次處理一件事情會更容易(目前尚不清楚Java EE對你而言是否新鮮)。 – SteveD 2009-08-24 20:57:52

回答

22

小技巧 - 我發現基於應用程序的關注對我的Spring xml上下文文件進行模塊化和清晰標記是有幫助的。下面是一個web應用程序我工作的一個例子:

  • MyProject/src/main/resources/spring /
    • datasource.xml - 我的單一數據源的bean。
    • persistence.xml - 我的DAOs /知識庫。取決於datasource.xml豆。
    • services.xml - 服務層實現。這些通常是我使用AOP應用事務性的bean。取決於persistence.xml豆。
    • controllers.xml - 我的Spring MVC控制器。取決於services.xml豆。
    • views.xml - 我的視圖實現。

這份名單既不完美也不詳盡,但我希望它說明了這一點。選擇最適合您的命名策略和粒度。

在我的(有限)的經驗,我已經看到了這種做法一代產量以下好處:

更清晰的架構

顯然命名上下文文件給那些不熟悉你的項目結構合理 地方開始尋找bean定義。可以使檢測循環/不需要的依賴更容易一些。

幫助域設計

如果你想添加一個bean定義,但它並沒有任何的背景文件吻合,也許有一個新的概念或關注新興?示例:

  • 假設您想讓服務層與AOP交易。您是否將這些bean定義添加到services.xml,或者將它們放在它們自己的transactionPolicy.xml?與你的團隊交談。您的交易政策應該可插拔嗎?
  • 將Acegi/Spring Security beans添加到您的controllers.xml文件中,或創建一個security.xml上下文文件?您對不同的部署/環境有不同的安全要求嗎?

集成測試

您可以連接您的應用程序進行集成測試的一個子集(例如:考慮到上述文件,來測試你只需要創建datasource.xmlpersistence.xml豆數據庫)。

具體而言,您可以標註一個集成測試類作爲這樣的:

@ContextConfiguration(locations = { "/spring/datasource.xml" , "/spring/persistence.xml" }) 

作品以及與Spring IDE的豆類圖形

有很多的專注和良好的命名上下文文件可以很容易地使用Spring IDE的Beans Graph創建自定義的BeansConfigSets以可視化您的應用程序的各個層次。我之前使用過這個功能來爲新團隊成員提供關於應用程序組織的高級概述。

2

儘管我已經使用彈簧已有多年,並且我不能說我是它的粉絲,但我知道App保險絲工具https://java.net/projects/appfuse/)有助於幫助人們在引導所有需要前進的工件方面進行引導。

14

首先關注Spring的核心:依賴注入。一旦你看到DI可以使用的所有方式,那麼就開始考慮更有趣的部分,比如AOP,遠程處理,JDBC模板等等。所以我最好的建議是讓你使用Spring從核心中發展出來。

最佳做法?如果您使用的是標準XML配置,請管理個別文件的大小並對其進行審慎評論。你可能會認爲你和其他人會完全理解你的bean定義,但實際上他們比普通的java代碼更難迴歸。

祝你好運!

3

其實我挺喜歡春天。它是在你的平均J2EE Java組件的空氣清新的微風..

我建議實施例如Spring提供:

http://static.springframework.org/docs/Spring-MVC-step-by-step/

另外,我因爲Spring爲Hibernate提供了很好的支持...... :)

我確實有一個不要,但是我學到了很難的方法(產品在pr oduction)...如果你只實現Controller接口,並返回一個ModelAndView對象與接口提供的一些數據,Spring會收集這些資源,試圖緩存這些數據。因此,請注意將大量數據放入這些ModelAndView對象中,因爲只要服務器在瀏覽該頁面時就立即停止服務器內存...

+0

超級鏈接中的好書 – Anirudh 2013-11-26 08:11:29

2

一種很好的方式獲得開始是專注於「Springframework」。 Spring的投資組合已經發展到一大堆圍繞企業軟件各個方面的項目。一開始就堅持核心,並努力把握概念。 Download最新的二進制文件,並且在熟悉核心時查看Spring的petclinic示例。它給出了SpringSource必須提供的各種項目的相當好的概述。

雖然文檔很好,但是在掌握了核心的概念之後,I'd recommend a book。我發現文檔存在問題的地方在於它不深入,無法爲您提供所有您需要的細節。

1

Spring對於單元測試也是非常重要的,因此你的類的可測試性。這基本上意味着思考模塊化,分離問題,通過接口引用類。

1

如果你只是想了解一下它,看看你是否喜歡它,我建議從DAO層開始,使用Spring的JDBC和/或Hibernate支持。這會讓你看到很多核心概念,但這樣做很容易與其他應用程序隔離開來。這是我遵循的路線,並且在與Spring一起構建完整應用程序之前進行了良好的熱身。

3

從這裏開始 - 我實際上認爲它是我讀過的最好的軟件開發書籍之一。
Expert Spring MVC And Web Flow

瞭解基於新的基於註釋的MVC類配置。這是Spring 2.5的一部分。使用基於Annotation的類將使編寫單元測試變得更容易。也能夠減少XML的數量是件好事。

哦是啊單元測試 - 如果你使用的是Spring,你會更好地進行單元測試。 :)爲所有的Web和服務層類編寫單元測試。

閱讀關於域驅動設計。事實上,您可以在Spring應用程序的所有級別使用Domain Object類,這意味着您將擁有一個非常強大的Domain Model。利用它。

但是,當使用Domain Object類作爲表單填充時,您將需要注意Spring Framework最近的安全問題。 A discussion on the Server Side揭示了在評論中關閉洞的方法。

2

「......您立即使用了哪種技術:AOP,複雜的Hibernate ......」 - 我想說一個更好的問題是詢問人們沒有馬上使用的東西。我會將您引用的示例添加到該列表中。

Spring MVC和JDBC模板將成爲我的首選建議。就這些而言,你可以走很長的路。

我的建議是忠實地遵循Spring的建築建議。使用他們的分層想法。確保您的網頁圖層與其他圖層完全分離。您可以通過讓Web層僅通過服務層與後端進行交互來實現這一點。

如果要重用該服務層,建議使用Spring「合同優先」Web服務公開它。如果您從來回傳遞的XML消息開始,則您的客戶端和服務器可以完全分離。

具有最佳Spring支持的IDE是IntelliJ。值得花幾塊錢。

1

隨着Spring 2.5和3.0的發佈,我認爲現在最重要的最佳實踐之一就是Spring註釋。控制器,服務和存儲庫註釋可以爲您節省大量時間,使您可以專注於應用程序的業務邏輯,並有可能讓所有對象都成爲普通的舊Java對象(PO​​JO)。

4

首先,Spring是關於模塊化的,如果一個人專注於編寫能夠完成一件事情並做得很好的小型組件,則效果最佳。

如果按照一般的像最佳做法:而非

  • 定義接口的抽象類
  • 使各類不可變
  • 保持依賴性儘可能少的單個類。
  • 每個班級都應該做一件事情,做得很好。龐大的單一課程吸引人,他們很難測試和難以使用。

如果你的組件很小,並遵循上面的教條,他們應該很容易連線並與其他東西玩。上述觀點自然也適用於Spring框架本身。

PS

不要聽上面的點,他們都在談論如何做什麼。學習如何思考而不是如何做某事更重要。人類可以思考,重複一些事情並不聰明,思維是。