私は春のブートプロジェクトを使用しています。異なる文脈の目的と関係を理解したいですか?例えばSpringのさまざまなコンテキストの目的と関係
、春のセキュリティコンテキスト、Springコンテキスト、サーブレットコンテキストなど(任意のより多くのコンテキストがありますか?)
私は春のブートプロジェクトを使用しています。異なる文脈の目的と関係を理解したいですか?例えばSpringのさまざまなコンテキストの目的と関係
、春のセキュリティコンテキスト、Springコンテキスト、サーブレットコンテキストなど(任意のより多くのコンテキストがありますか?)
あり解釈が異なることがありますが、私はそれを見る方法であることができます。
春のセキュリティコンテキスト、SecurityContextクラスの意味で、認証を保持し、ユーザ名、おそらく当局(役割)と現在のユーザーに関するその他の情報そのようなコンテキストの存続期間は現在の要求であるか、セキュリティコンテキストはセッションを使用する要求間で維持されます。
の意味で、ApplicationContextクラスの意味は、実行中のSpringアプリケーションの中心点です。その主な目的は、アプリケーションシングルトンの豆を含むことですが、それは他の多くの素晴らしい機能(別の答えに記載)がいくつかあります。アプリケーションは複数のApplicationContextを持つことができますが、もっとも一般的で最も単純なケースは1つだけです。 Webアプリケーションは通常、サーブレットコンテキストと統合する「拡張子」をWebApplicationContextで使用します。
サーブレットコンテキストは、ServletContextクラスの意味であり、サーブレットWebアプリケーションが持つアプリケーション全体のコンテキストです。 Tomcatのようなサーブレットコンテナには常にwebappインスタンスごとに1つしかありません。それは春の一部ではありません。あなたはSpringを使うときにそれを直接使うことはめったにありません。しかし、それは背景にあります。
「コンテキスト」はかなり一般的な用語であり、環境内に他のコンテキストも存在する可能性があります。
そこに多くの「コンテキストは」であり、どのようにそれらがロードされているアプリケーションを初期化する方法によって決まります。しかし、通常、ほとんどのアプリケーションには、アプリケーションに必要なすべてのBeanとコンポーネントが含まれる単一のコンテキストがあります。
たとえば、サーブレットを使用してアプリケーションをロードした場合、サーブレットコンテキストを子としてロードする「ルートコンテキスト」を全体としてロードできます。
階層構造は次のとおりです。"root" context
- >any other context
それは簡単です。アプリケーションコンポーネントにアクセスするため
Aはhere in the Spring DocsApplicationContext
を提供します。 (dependency injectionと呼ばれるnew()
を使用せずにアプリケーションで必要なものを話してください)
Springブートを使用しているため、既定ではコンテキストが1つだけです。ApplicationContext
です。これには、必要なすべてのもの(豆)とコンポーネントが含まれます。
これは、Springブートを使用することの美しさ、最小限の構成、および単純化された構成です。複数のコンテキストが必要だと感じたら、代わりにProfilesを使用してください。
最終的に「コンテキスト」はアプリケーションによって作成され、定義されます。アプリケーションを定義する構成(XMLまたはJavaの場合)と考えることができます。 「それに」あるものと、「それが必要なもの」が働くこと。
もっと理解しようと思えば、最初から読んでからIntroduction to Springで始めることを強くお勧めします。
システム設計上、どのコンテキストも共通の機能とデータのコレクションであり、1か所で定義されていますが、プログラムのどこからでも使用する必要があります。そしてコンテキストの主な目的はで、アプリケーションのコンポーネント間の依存関係の数を減らす。 Contextの別の目的 - は、共通の機能とデータへのアクセスを簡素化します。あなたの質問に記載されている文脈を考慮してみましょう。
のServletContext
ServletContext
はServlet technologyの一部です。多くのフレームワークはこの技術に基づいています(JSF、Spring、Strutsなど、多くはです)。 ServletContext
には、サーブレットコンテナ(、Tomcat、Glassfishなどなど)と通信する機能が含まれています。 ServletContext
が提供する基本的なもの:
など、アプリケーションのパスのような追加情報を取得しますそれに基づいた1つのMVCフレームワーク)。
のApplicationContext
ApplicationContext
はSpring frameworkアプリケーションのメインインタフェースです。それには多くの実装があります。それらのうちの1つがxml-file(ClassPathXmlApplicationContext)から設定をロードし、もう1つはアノテーション(AnnotationConfigApplicationContext)に基づいて設定をロードします。ApplicationContext
が提供する基本的なもの:
また、この基本機能は、開始時に初期化され、アプリケーションのほとんどの場所で役立ちます。それが文脈に集められた理由です。多くのクラスはバックグラウンドで、この機能を提供するために使用されていますが、この機能を使用するためにはすべてが知っておく必要があります。ただApplicationContext
です。
SecurityContextが
SecurityContext
認証データへのアクセスを提供します。認証されたユーザー、ロール、およびその他の詳細の名前を取得できます。セキュリティモジュールによって初期化されたこの情報は、多くの場所で必要となる可能性があります。この情報を使用するコンポーネントは、セキュリティモジュールのクラスについては何も知らない。彼らはSecurityContext
から必要な情報をすべて取得します。
右のWebベースのSpringアプリケーションもサーブレットの上で実行されますか?だから私は "ルート"コンテキスト - > "サーブレット"コンテキスト - > "春"コンテキストが正しいと言う場合? – Harshana
ルートコンテキストは「ベースコンテキスト」なので、サーブレットコンテキストはルートコンテキストから子を継承します。 このように考えると、アプリケーションが必要とするすべてのもの(サービスなど)でルートコンテキストを作成しますが、サーブレットコンテキストはサーブレットに必要なものだけをインスタンス化します。 コンテナごとに複数のサーブレットを持つことができ、すべてが「ルートアプリケーションコンテキスト」を共有できることを覚えておいてください。 – dkanejs
ありがとうございました。サーブレットとスプリングコンテキストについては、サーブレットコンテキストがスプリングコンテキストの親であるか、それとも兄弟関係ですか?また、Springはサーブレットのコンテキストにアクセスできますが、その逆はできません。あれは正しいですか? – Harshana