ルートと子のコンテキストさらに読む前に、次のことを理解してください–
Springは一度に複数のコンテキストを持つことができます。それらの1つはルートコンテキストになり、他のすべてのコンテキストは子コンテキストになります。
すべての子コンテキストは、ルートコンテキストで定義されたBeanにアクセスできます。しかし、反対は真実ではありません。ルートコンテキストは子コンテキストBeanにアクセスできません。
ApplicationContext:
applicationContext.xmlは、すべてのWebアプリケーションのルートコンテキスト構成です。SpringはapplicationContext.xmlファイルをロードし、アプリケーション全体のApplicationContextを作成します。Webアプリケーションごとに1つのアプリケーションコンテキストのみが存在します。contextConfigLocationパラメーターを使用してweb.xmlでコンテキスト構成ファイル名を明示的に宣言していない場合、SpringはWEB-INFフォルダーでapplicationContext.xmlを検索し、このファイルが見つからない場合はFileNotFoundExceptionをスローします。
ContextLoaderListenerルートアプリケーションコンテキストの実際の初期化作業を実行します。「contextConfigLocation」context-paramを読み取り、その値をコンテキストインスタンスに渡して、任意の数のコンマとスペースで区切られる可能性のある複数のファイルパスに解析します。例:「WEB-INF / applicationContext1.xml、WEB-INF / applicationContext2.xml」。ContextLoaderListenerはオプションです。ここで強調しておきたいのは、ContextLoaderListenerを構成しなくても、DispatcherServletを使用した基本的な最小限のweb.xmlでSpringアプリケーションを起動できることです。
DispatcherServlet DispatcherServletは基本的にサーブレット(HttpServletを拡張したもの)であり、その主な目的は、構成されたURLパターンに一致する着信Webリクエストを処理することです。着信URIを受け取り、コントローラーとビューの正しい組み合わせを見つけます。それがフロントコントローラーです。
Spring構成でDispatcherServletを定義するときは、contextConfigLocation属性を使用して、コントローラークラスのエントリ、ビューのマッピングなどをXMLファイルに提供します。
WebApplicationContext ApplicationContextとは別に、1つのWebアプリケーションに複数のWebApplicationContextを含めることができます。簡単に言うと、各DispatcherServletは単一のWebApplicationContextに関連付けられています。xxx-servlet.xmlファイルはDispatcherServletに固有であり、Webアプリケーションは複数のDispatcherServletを構成してリクエストを処理できます。このようなシナリオでは、各DispatcherServletに個別のxxx-servlet.xmlが構成されます。ただし、applicationContext.xmlはすべてのサーブレット構成ファイルに共通です。Springはデフォルトで、「xxx-servlet.xml」という名前のファイルをwebapps WEB-INFフォルダーからロードします。xxxはweb.xmlのサーブレット名です。そのファイル名の名前または場所を変更する場合は、パラメーター名としてcontextConfigLocationを含むiniti-paramを追加します。
それらの間の比較と関係:
ContextLoaderListenerとDispatcherServlet
ContextLoaderListenerは、ルートアプリケーションコンテキストを作成します。DispatcherServletエントリは、サーブレットエントリごとに1つの子アプリケーションコンテキストを作成します。子コンテキストは、ルートコンテキストで定義されたBeanにアクセスできます。ルートコンテキストのBeanは、子コンテキストのBeanに(直接)アクセスできません。すべてのコンテキストがServletContextに追加されます。WebApplicationContextUtilsクラスを使用してルートコンテキストにアクセスできます。
Springのドキュメントを読んだ後、次のことが理解できます。
a)Application-Contextsは階層的であり、WebApplicationContextsも同様です。こちらのドキュメントを参照してください。
b)ContextLoaderListenerは、WebアプリケーションのルートWebアプリケーションコンテキストを作成し、それをServletContextに配置します。このコンテキストを使用して、コントローラー層(StrutsまたはSpring MVC)で使用されているテクノロジーに関係なく、Spring管理のBeanをロードおよびアンロードできます。
c)DispatcherServletは独自のWebApplicationContextを作成し、handlers / controllers / view-resolversはこのコンテキストによって管理されます。
d)ContextLoaderListenerがDispatcherServletと組み合わせて使用される場合、前述のようにルートweb-application-contextが最初に作成され、子コンテキストもDispatcherSerlvetによって作成され、ルートapplication-contextにアタッチされます。こちらのドキュメントを参照してください。
Spring MVCを使用していて、サービスレイヤーでSpringも使用している場合、2つのアプリケーションコンテキストを提供します。1つ目はContextLoaderListenerを使用して構成され、もう1つはDispatcherServletを使用して構成されます。
一般に、DispatcherServletコンテキストですべてのMVC関連Bean(コントローラーやビューなど)を定義し、ContextLoaderListenerによってルートコンテキストでセキュリティ、トランザクション、サービスなどのすべてのクロスカッティングBeanを定義します。
詳細については、こちらを参照してください:https :
//siddharthnawani.blogspot.com/2019/10/contextloaderlistener-vs.html