2009-01-10 45 views
21

我們已經開始在我的項目中使用Spring框架。在熟悉基本特徵(IoC)後,我們開始使用彈簧和彈簧安全。春季上下文文件組織和最佳實踐

問題是我們現在有超過8個不同的上下文文件,我覺得我們沒有對這些文件及其角色的組織給予足夠的考慮。隨着項目的發展,新文件被引入。 我們有不同的上下文文件:元數據,aop,授權,服務,Web資源(這是一個RESTful應用程序)。所以當一個開發人員想要添加一個新的bean時,並不總是清楚他應該添加哪個文件。我們需要方法論。

問題:

有沒有春季文件組織的最佳做法?

上下文文件是否應該封裝圖層(DAL,Business Logic,Web)或用例?或流量?

回答

19

如果您仍然在項目的早期階段,我會建議您強烈關注註釋驅動的配置。轉換爲註釋後,我們只有1個含有定義的XML文件,它非常小,而且這是一個大型項目。註釋驅動的配置把重點放在你的實現上而不是xml上。它也或多或少地去除了相當多餘的抽象層,即春天的「bean名稱」。事實證明,bean名稱主要存在,因爲 xml(bean名稱仍然存在於註釋配置中,但在大多數情況下不相關)。在完成這個項目之後,每個人都100%同意,這是一個lot更好,我們也有相當體面的證據表明這是一個更有效率的環境。

我真的推薦任何人誰使用彈簧切換到註釋。它們也可以混合使用。如果你需要過渡性的建議,我想這很容易問這個問題;)

5

Spring上下文文件包含bean的定義,所以我認爲最好遵循OO原則,並按照與構建包中的類相同的方式構造它們。我們通常創建封裝來封裝一組能夠解決特定問題的類。一個包通常封裝一個水平層(數據庫層,中間件,業務邏輯或其中的一部分)。在某些情況下,程序包包含與水平層相對應的類(如上所述,用例或流程)。一般來說,我會建議爲每個包或一組包創建一個上下文文件。當您添加一個新的bean時,將其添加到與該類的包相對應的上下文文件中。

當然,這不應該是一個非常嚴格的規則,因爲可能有些情況下,遵循另一種做法會有好處。

+0

你會分開aop或授權上下文從他們的業務邏輯? – LiorH 2009-01-10 15:52:49

+0

我希望有一個security.xml文件來容納這些bean。在一個小型到中型的項目中,我相信這樣會更好。也許對於大型項目來說這是不合適的。 – kgiannakakis 2009-01-10 17:41:57

1

我發現我按層分解它們。

當我爲每個圖層編寫單元測試時,我會使用與測試相關的值覆蓋生產上下文。

0

把配置分解成單獨的文件在測試方面對我很有用。在一個小型項目中,我將Spring Security配置放入「securityContext.xml」,將其餘的bean放入「applicationContext.xml」中。然後,在運行集成測試時,通過選擇是否包含securityContext.xml,可以輕鬆啓用或禁用安全性。這與AOP幾乎相似,因爲您可以通過選擇是否包含特定文件來爲應用程序添加更多功能。

7

從applicationContext.xml開始,並在有很多bean有共同點時分開。

爲了給你一個可能的設置的一些想法,在應用程序我目前工作的,這是我在服務器:

  • 的applicationContext.xml
  • securityContext.xml
  • schedulingContext .XML
  • dataSourcecontext.xml
  • 彈簧WS-servlet.xml中(春Web服務相關的bean)

對於GUI客戶端,由於此項目有幾個,因此有一個共享上下文文件的文件夾,最重要的是,每個客戶端都有自己的上下文文件夾。共享上下文文件:

  • sharedMainApplicationContext.xml
  • sharedGuiContext.xml
  • sharedSecurityContext.xml應用特定

文件:

  • mainApplicationContext.xml和
  • guiContext .xml和
  • commandsContext.xml(菜單結構)
  • sharedBusinessLayerContext.xml(豆用於連接到服務器)
1

沒錯 - 分裂上的豆在其中類似的作用。至於註釋,我相信他們「可能」扮演一個小角色,可能與事務定義有關,但除此之外,他們只是永遠綁定你的代碼,你可能直接在任何地方添加spring(或任何其他第三方)引用。對於我來說,註釋=快捷鍵和技術債務。它們不是外部可配置的,因此重新佈線或取消接線代碼並限制重用也不是微不足道的。一個給定的bean永遠被其註釋的依賴和配置所困住,所以不能被多個項目/進程同時使用不同的接線和配置。 只是我2美分。

1

我會遵循spring的建議,並將背景文件放在META-INF/spring中,如Spring Roo documentation中所述。一般來說,我會建議嘗試roo並遵循其項目結構和佈局。

src/ 
+-- main/ 
| +-- java/ 
| \-- resources/ 
|  +-- META-INF/ 
|  | \-- spring/     ‹ normal spring context files 
|  |  +-- context.xml 
|  |  \-- context-services.xml 
|  \-- other files 
| 
+-- test/ 
| +-- java/ 
| \-- resources/ 
|  +-- META-INF/ 
|  | \-- spring/     ‹ context files for testing 
|  |  +-- context-test.xml 
|  |  \-- context-dao-test.xml 
|  \-- other files 
| 
\-- pom.xml 

的Spring XML VS註釋

上有話題很多好文章,但我想破了一個普遍的誤解,因爲這兩種方法都有其優點:如果您想將配置從實際實現中分離出來,使用XML更容易,但您可以使用註釋實現相同的操作,如krosenvold said。但是,使用XML配置文件時,只需要bean名稱,如果必須直接引用bean。您始終可以按名稱或類型使用auto-wiring

唯一重要的是,您應該在整個項目中保持一致,或者在可能的情況下在整個公司的項目中保持一致。