簡體   English   中英

Java,用spring配置企業應用程序和Web應用程序:它們應該共享spring上下文嗎?

[英]Java, configure enterprise application and web application with spring: should they share the spring context?

我有一個基於彈簧集成的事件驅動的應用程序。 該應用程序由4個模塊組成:域(模型對象),持久性(dao),核心(基於spring-integration的biz邏輯)服務(MDB)。

每個模塊都是一個Maven項目。 該應用程序打包在EAR中,並部署在weblogic上。

Spring上下文在所有模塊之間共享。

現在,我必須開發一個Web應用程序以公開域的子集:因此我的控制器應使用一些dao和某些域對象。 解決此問題的最佳實踐是什么? Web應用程序是否應該共享所有的彈簧上下文? 還是在我重新定義我需要的所有東西的基礎上創建一個“臨時” Web應用程序春季上下文更好? (例如daos)。

似乎您將從功能分層中受益,例如instead of

|- persistence (daos)
|- domain (model objects)
|- core (biz logic based on spring-integration)
|- services (MDB)

您可以通過功能性方式對應用程序進行分層。 假設您的應用程序確實在交易:

|- broker
|- product
    |- underlying
    |- option
    |- future
    |- forward
    |- ..
|- feed 
|- valuation
|- ...

broker您將具有broker-persistencebroker-service等。當然,您的應用程序的業務領域可能有所不同,這是一個幼稚的示例,但它說明了這一點。

這樣,您仍然可以將所有內容都包含在EAR ,並在可以包含/導入到Webapp中的內容上具有更大的靈活性。

例如,你甚至可以創建一個broker.war從單獨的product.war 這也意味着您可以在不降低product.war情況下重新部署 broker.war 您可能不需要在您的業務領域中使用它,但這是一種很好的能力,只有根據業務需求/領域(而不是技術堆棧)對事物進行分層時才能實現。

順便說一句,不需要只為MDB使EAR復雜化,您可以使用Spring的消息驅動POJO ,它可以由Spring容器簡單地控制。

通常,您為每個DispatcherServlet創建一個特定的WebApplicationContext,並在其中放置所有與Web相關的內容,例如控制器,處理程序映射,視圖解析器等。其余應用程序上下文(例如服務,Dao等)在/所有servlet共享的根WebApplicationContext

示例web.xml

<web-app ...>

    <!-- Definition of the root web application context and shared by all servlets -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dao-config.xml,/WEB-INF/other-config.xml</param-value>
    </context-param>

    <!-- Must be added to enable the configs above -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Servlet specific application context that inherits bean definitions from the root application context. By convention, it is located in in /WEB-INF/[servlet-name]-servlet.xml -->
    <servlet>
        <servlet-name>yourservlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>yourservlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>

向下滾動到Spring MVC參考文檔中的圖片“ Spring Web MVC中的上下文層次結構”以獲取概述和更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM