2016-03-03 11 views
16

私は春のブートプロジェクトを使用しています。異なる文脈の目的と関係を理解し​​たいですか?例えばSpringのさまざまなコンテキストの目的と関係

、春のセキュリティコンテキスト、Springコンテキスト、サーブレットコンテキストなど(任意のより多くのコンテキストがありますか?)

答えて

8

あり解釈が異なることがありますが、私はそれを見る方法であることができます。

  • 春のセキュリティコンテキストSecurityContextクラスの意味で、認証を保持し、ユーザ名、おそらく当局(役割)と現在のユーザーに関するその他の情報そのようなコンテキストの存続期間は現在の要求であるか、セキュリティコンテキストはセッションを使用する要求間で維持されます。

  • の意味で、ApplicationContextクラスの意味は、実行中のSpringアプリケーションの中心点です。その主な目的は、アプリケーションシングルトンの豆を含むことですが、それは他の多くの素晴らしい機能(別の答えに記載)がいくつかあります。アプリケーションは複数のApplicationContextを持つことができますが、もっとも一般的で最も単純なケースは1つだけです。 Webアプリケーションは通常、サーブレットコンテキストと統合する「拡張子」をWebApplicationContextで使用します。

  • サーブレットコンテキストは、ServletContextクラスの意味であり、サーブレットWebアプリケーションが持つアプリケーション全体のコンテキストです。 Tomcatのようなサーブレットコンテナには常にwebappインスタンスごとに1つしかありません。それは春の一部ではありません。あなたはSpringを使うときにそれを直接使うことはめったにありません。しかし、それは背景にあります。

「コンテキスト」はかなり一般的な用語であり、環境内に他のコンテキストも存在する可能性があります。

5

そこに多くの「コンテキストは」であり、どのようにそれらがロードされているアプリケーションを初期化する方法によって決まります。しかし、通常、ほとんどのアプリケーションには、アプリケーションに必要なすべてのBeanとコンポーネントが含まれる単一のコンテキストがあります。

たとえば、サーブレットを使用してアプリケーションをロードした場合、サーブレットコンテキストを子としてロードする「ルートコンテキスト」を全体としてロードできます。

階層構造は次のとおりです。"root" context - >any other contextそれは簡単です。アプリケーションコンポーネントにアクセスするため

  • ビーンファクトリメソッド:

    Aはhere in the Spring DocsApplicationContextを提供します。 (dependency injectionと呼ばれるnew()を使用せずにアプリケーションで必要なものを話してください)

  • ファイルリソースを一般的な方法で読み込むことができます。 (外部設定propertiesおよびprofiles
  • 登録されたリスナーにイベントを公開する機能。 (「特定のことが起こったときには何かが起きる」というファンシーな話は、observer patternを参照してください)
  • 国際化をサポートするメッセージを解決する能力。 (アプリケーションで使用されているすべての文字列が異なる言語で表示できるようにするファイルについては、MessageSourceを参照してください)
  • 親コンテキストからの継承。 (前にも述べたように、アプリケーションには「コンテキスト」が必要です。これは開始位置です)

Springブートを使用しているため、既定ではコンテキストが1つだけです。ApplicationContextです。これには、必要なすべてのもの(豆)とコンポーネントが含まれます。

これは、Springブートを使用することの美しさ、最小限の構成、および単純化された構成です。複数のコンテキストが必要だと感じたら、代わりにProfilesを使用してください。

最終的に「コンテキスト」はアプリケーションによって作成され、定義されます。アプリケーションを定義する構成(XMLまたはJavaの場合)と考えることができます。 「それに」あるものと、「それが必要なもの」が働くこと。

もっと理解しようと思えば、最初から読んでからIntroduction to Springで始めることを強くお勧めします。

+0

右のWebベースのSpringアプリケーションもサーブレットの上で実行されますか?だから私は "ルート"コンテキスト - > "サーブレット"コンテキスト - > "春"コンテキストが正しいと言う場合? – Harshana

+0

ルートコンテキストは「ベースコンテキスト」なので、サーブレットコンテキストはルートコンテキストから子を継承します。 このように考えると、アプリケーションが必要とするすべてのもの(サービスなど)でルートコンテキストを作成しますが、サーブレットコンテキストはサーブレットに必要なものだけをインスタンス化します。 コンテナごとに複数のサーブレットを持つことができ、すべてが「ルートアプリケーションコンテキスト」を共有できることを覚えておいてください。 – dkanejs

+0

ありがとうございました。サーブレットとスプリングコンテキストについては、サーブレットコンテキストがスプリングコンテキストの親であるか、それとも兄弟関係ですか?また、Springはサーブレットのコンテキストにアクセスできますが、その逆はできません。あれは正しいですか? – Harshana

3

システム設計上、どのコンテキストも共通の機能とデータのコレクションであり、1か所で定義されていますが、プログラムのどこからでも使用する必要があります。そしてコンテキストの主な目的はで、アプリケーションのコンポーネント間の依存関係の数を減らす。 Contextの別の目的 - は、共通の機能とデータへのアクセスを簡素化します。あなたの質問に記載されている文脈を考慮してみましょう。

のServletContext

ServletContextServlet technologyの一部です。多くのフレームワークはこの技術に基づいています(JSF、Spring、Strutsなど、多くはです)。 ServletContextには、サーブレットコンテナ(、Tomcat、Glassfishな​​どなど)と通信する機能が含まれています。 ServletContextが提供する基本的なもの:

  • getアプリケーション初期パラメータ;
  • リクエストのディスパッチに関する情報を取得します。
  • サーブレット、フィルタ、およびリスナーを追加または削除します。
  • コンテナの属性を取得または設定します。
  • ログランタイムメッセージ。あなたはサーブレット技術で動作する場合、アプリケーションのどこに有用であることができる唯一の基本的な機能は、(例えば、別のものを開発している見たよう
  • は、コンテナのバージョンが

など、アプリケーションのパスのような追加情報を取得しますそれに基づいた1つのMVCフレームワーク)。

のApplicationContext

ApplicationContextSpring frameworkアプリケーションのメインインタフェースです。それには多くの実装があります。それらのうちの1つがxml-file(ClassPathXmlApplicationContext)から設定をロードし、もう1つはアノテーション(AnnotationConfigApplicationContext)に基づいて設定をロードします。ApplicationContextが提供する基本的なもの:

  • bean factory、bean定義に基づいて新しいbeanを作成する能力。
  • 異なるソース(ファイルシステム、jarファイル、urlなど)からリソースをロードします。
  • イベントをパブリッシュして聴く能力。
  • メッセージバンドルからメッセージを解決します。

また、この基本機能は、開始時に初期化され、アプリケーションのほとんどの場所で役立ちます。それが文脈に集められた理由です。多くのクラスはバックグラウンドで、この機能を提供するために使用されていますが、この機能を使用するためにはすべてが知っておく必要があります。ただApplicationContextです。

SecurityContextが

SecurityContext認証データへのアクセスを提供します。認証されたユーザー、ロール、およびその他の詳細の名前を取得できます。セキュリティモジュールによって初期化されたこの情報は、多くの場所で必要となる可能性があります。この情報を使用するコンポーネントは、セキュリティモジュールのクラスについては何も知らない。彼らはSecurityContextから必要な情報をすべて取得します。

関連する問題