0

Web アプリケーションに Web アプリケーション コンテキスト (DISPATCHER 用) と Web サービス コンテキスト (MESSAGE DISPATCHER 用) があります。シングルトンの Bean が 1 つあり、両方のコンテキストでその Bean が必要です。両方のコンテキストで Bean をシングルトンとして指定すると、シングルトンではなくなります。解決策を提案するか、正しい方向に導いてください。

<servlet>
    <servlet-name>ws</servlet-name>
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>        
    <init-param>
        <param-name>transformWsdlLocations</param-name>
        <param-value>true</param-value>
    </init-param>       
</servlet>

<servlet-mapping>
    <servlet-name>ws</servlet-name>
    <url-pattern>/service/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        
</servlet>

<servlet-mapping>
    <servlet-name>mvc</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>mvc</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
4

2 に答える 2

2

あなたの質問を正しく理解できれば、Web アプリケーション コンテキスト (例: *-servlet.xml) とルート アプリケーション コンテキスト (例: applicationContext.xml) があります。Web アプリケーション コンテキストはアプリケーション コンテキストを拡張するため、親から Bean にアクセスできますが、その逆はできません。したがって、両方でアクセスする必要がある Bean は、applicationContext.xml

見る:

編集:

web.xml には 2 つの ServletContexts がありますが、ルート コンテキストはありません。Spring MVC の ApplicationContext と WebApplicationContext の違いは何ですか?への回答 これについての優れた説明がありますが、要するに、web.xml に以下を追加して、ルート アプリケーション コンテキストをロードする必要があります。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> 

次に、applicationContext.xml からルート アプリケーション コンテキストを読み込みます。ルート アプリケーション コンテキストの Bean は、両方の ServletContext でアクセスできます。通常、ServletContexts には Web 関連の Bean (Controllers など) のみが必要であり、ルート アプリケーション コンテキストには共有ビジネス ロジックが必要です。

于 2013-10-25T09:51:45.257 に答える
1

Bean を 2 つの異なるコンテキストで使用する必要がある場合は、別のアプリケーション コンテキスト xml ファイルで定義してから、3 つのアプリケーション コンテキストを作成します。

ルート コンテキスト - 共有 Bean を含む

アプリ コンテキスト 1. 例: Web アプリ。親としてルート コンテキストを持ちます。アプリ コンテキスト 2. たとえば、Web サービス インターフェイスも、親としてルート コンテキストを持ちます。

Bean は、ルート アプリケーション コンテキストが作成されるときに 1 回インスタンス化されます。その後、両方の子アプリ コンテキストがそのシングルトン Bean を使用できます。

于 2013-10-25T08:47:15.483 に答える