Spring MVCアプリケーションに関しては、2つのApplicationContextとServletContextの間で混乱します。 Spring WebアプリケーションごとにApplicationContextが1つだけあり、WebアプリケーションごとにServletContextが1つしかないことも知っています。 web.xmlでApplicationContextとServletContextの両方の値を開始するには、context-paramタグに何かを追加します。
それが私を混乱させるポイントです。 違いは何ですかこれら2つの間(ApplicationContextにはBeanを操作するいくつかのメソッドがあることを知っています)?およびWhenを使用しますApplicationContextおよびWhenを使用しますServletContext?
サーブレットアプリケーションがデプロイされると初期化されます。サーブレットコンテキストは、サーブレットアプリケーション全体のすべての構成(init-param、context-paramsなど)を保持します。
これはSpring固有のものです。 Springによって初期化されます。すべてのBean定義と、Spring構成ファイル内で定義されたBeanのライフサイクルを保持します。 Servlet-Contextはこのことについて何も知りません。
Springの親と子には2種類のコンテキストがあります。
<listener>
<listener-lass>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/service-context.xml,
/WEB-INF/dao-context.xml,
/WEB-INF/was-context.xml,
/WEB-INF/jndi-context.xml,
/WEB-INF/json-context.xml
</param-value>
</context-param>
コンテキストローダーの役割、春のリスナー
Spring-ContextLoaderListener-And-DispatcherServlet-Concepts
Springコンテナが起動すると、構成ファイルからすべてのBean定義を読み取り、Beanオブジェクトを作成し、Beanオブジェクトのライフサイクルを管理します。この構成は完全にオプションです。
DispatcherServlet vs ContextLoaderListener
/ declaring-spring-bean-in-parent-context-vs-child-context
<servlet>
<servlet-name>myWebApplication</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myWebApplication</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
Spring Webアプリケーションが起動すると、Spring Bean構成ファイルmyWebApplication-servlet.xmlが検索されます。すべてのBean定義を読み取り、Beanオブジェクトのライフサイクルを作成および管理します。親スプリングコンテキストが利用可能な場合、子スプリングコンテキストを親スプリングコンテキストにマージします。使用可能なSpring親コンテキストがない場合、アプリケーションには子Springコンテキストのみが含まれます。
それらは別個のものです。すべてのJavaサーブレットテクノロジーに基づくWebアプリケーションは、春のアプリケーションであるかどうかにかかわらず、 サーブレットコンテキスト を持ちます。これに対して、 ApplicationContext はSpringのものであり、非常に簡単に言えば、Spring Beanを保持するコンテナです。
Web.xmlでApplicationContextとServletContextの両方の値を開始するには、context-paramタグに何かを追加します。
私の知る限り、ContextContextはApplicationContextではなくServletContextに使用されるため、この例を引用すると役立ちます。
更新:
以下のように、context-param
を使用して、ルートアプリケーションコンテキスト構成ファイルの場所を指定できます。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/root-context.xml
/WEB-INF/applicationContext-security.xml
</param-value>
</context-param>
ApplicationContextは、Springのコンテナです。
これは、Spring Beanの構成をまとめてアプリケーションに使用するために使用されます。
Spring Beanの情報を取得する場合は、ApplicationContextを使用します。
すべてのサーブレットに共有されている属性を取得/設定する場合は、ServletContextを使用します。
Springでは、特定の初期化設定ファイルを読み込むために、context-paramとcontextConfigLocationという定義済みの名前を使用します。
<context-param>
<description>WebFlow context configuration</description>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/test-context.xml</param-value>
</context-param>
しかし、フレームワークを含まないプレーンJ2EE Webアプリケーションの場合、context-paramは、アプリケーションの任意の場所、つまりサーブレット、フィルターから読み取ることができます。
ApplicationContextとServletContextの違いは、sanjayが説明した