2

EclipseでSTSを使用してmvcプロジェクトを作成すると、servlet-context.xmlがルートコンテキストとdispatcherservletコンテキストの両方で使用されるように記述されているように見えます。これは、context:component-scanが含まれていることに気付いたためです。これは、ルートコンテキストに読み込まれることがよくありますが、dispatcherservletコンテキストに読み込まれます。また、春のmvc /jpaプロジェクトのサンプル(http://duckranger.com/2012/04/spring-mvc-3-x-with-sts-tutorial-part-iii-add-some-jpa/ )にも気づきました。両方のコンテキストにservlet-context.xmlをロードします。コンテキストを明確に分離することがアイデアだと思いました。誰かが私にこれを説明できますか?

4

1 に答える 1

6

次の構成は明らかに間違っています

  <!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:META-INF\root-context.xml
            classpath:META-INF\servlet-context.xml
            classpath:META-INF\datasource.xml
        </param-value>
    </context-param>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:META-INF\servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
  • Springのコンテキスト階層により、ルートコンテキストからのBeanはサーブレットコンテキストですでに使用可能になっているため、ルートコンテキストとサーブレットコンテキストは同じファイルをインポートしないでください。異なるコンテキストでそれらのコピーを作成する意味はありません(特に、ルートコンテキストのBeanはサーブレットコンテキストのBeanによってシャドウされるため、たとえば<tx:annotation-driven>、ルートコンテキストでのみ宣言した場合、の動作には影響しません。サーブレットコンテキストBean。これにより、構成がさらに複雑になります)。
  • <jpa:repositories>サービス層のリポジトリを使用する可能性が非常に高いため、サーブレットコンテキストに入れるのは非常に非論理的です。
  • 通常、MVC構成以外はサーブレットコンテキストに配置しないでください。これは、サービスが存在する必要があるルートWebアプリコンテキストです。サーブレットコンテキストは、コントローラーをサービスから分離するため、Spring Test Contextフレームワークを使用してサービスをテストする場合、コントローラーを作成する必要はありません(マッピングをテストする場合は、Spring MVCテストフレームワークを使用する必要があります)。アプリケーションサービスを直接。明確にするために、六角形のアーキテクチャの記事からの図を調べる と ここに画像の説明を入力してください

サーブレットコンテキストには、ユーザー側のAPI関連のもののみが含まれ、アプリケーションは含まれない必要があります。ルートWebアプリコンテキストの構成を分割し、 data-side-apiを別の構成ファイルに配置する必要があるかどうかは議論の余地がありますが、問題はサーブレット/ルートコンテキストに関するものでした。

抽象的ではありませんが、Springアプリケーションを構成するときに(SpringコンテキストとBean構成ファイルに関して)私が通常心に留めていることの非公式な図を次に示します(もちろん、すべて主観的ですが、これは優れたソリューションではなく、実際には少し終わりです複雑-これほど多くのサーブレットと構成ファイルが必要になる可能性は低いです)

スプリングアーキテクチャとヘキサゴナルアーキテクチャの関係サーブレットは、さまざまな種類の着信リクエストを処理します。つまり、mvcのサーブレット、gwtのサーブレット、RESTのサーブレットなど、発信リクエストはルートアプリコンテキストから開始されます。

于 2013-02-02T06:52:41.493 に答える