私の同僚は「アプリケーション コンテキスト」という言葉を頻繁に使用します。多くの記事でもこのコロケーションが頻繁に使用されています。
私の現在の理解: アプリケーション コンテキストは単一の XML ファイルです。
しかし、私が正しければ、人々は構成 XML ファイルの代わりに「アプリケーション コンテキスト」を使用しないだろうと理解しています。
この問題に対処するのを手伝ってもらえますか?
ベストアンサー1
@feakは、ApplicationContext
Spring の観点から言えば、これは設定 (通常は
XML ファイル
アノテーション ベース) をロードするオブジェクトであり、その後 Spring は Bean とその利点の管理を開始します。
- パッケージ内で宣言されたBean
- アノテーションで宣言されたBean
- コンストラクタとメソッドの自動配線
- 豆注入
- 構成、.properties、.yaml ファイルの読み込み
- 等
アプリケーション コンテキストを開始するには、次のいずれかを使用します。
アプリケーションの先頭でアプリケーション コンテキストを手動でロードします。これは、サンプル目的またはスタンドアロン アプリケーションで実行されます。
public class Foo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("path/to/applicationContext.xml"); //use the context as you wish... } }
Spring MVCを使用するJava Webアプリケーションの場合、
DispatchServlet
アプリケーションコンテキストがロードされるので、springapp-servlet.xmlアプリケーションの WEB-INF フォルダー内のファイル。
ご了承くださいアプリケーションコンテキストは単一の構成に関連付けられます(XML ベースかどうか)。以上。
これを理解したら、アプリケーションごとに複数のアプリケーション コンテキストを持つことができることも理解できます。つまり、同じアプリケーションに 2 つ以上の を持つことができますApplicationContext
。コンソール アプリケーションの最後の例から、これは簡単に確認できます。
public class Foo {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("path/to/applicationContext.xml");
ApplicationContext context2 =
new ClassPathXmlApplicationContext("path/to/applicationContext.xml");
//use the context as you wish...
}
}
同じXML設定を使用するアプリケーションコンテキストが2つあることに注意してください。これはできますか?はい、実際にここで確認できます。では違いは何でしょうか?主要違いは、Spring Beanのシングルトンスコープはシングルトンであることですアプリケーションコンテキストごとこれは、Bar
applicationContext.xmlファイルで設定されたBeanをcontext
同じではないから取得するのと同じですcontext2
が、 から複数回取得すると、context
同じBar
Bean インスタンスが返されます。
これは良い習慣でしょうか、それとも悪い習慣でしょうか?どちらでもない解決すべき問題によって異なります(最後の例の場合、悪い実践です。ほとんどの人は、すべての Bean を 1 か所で (XML などを使用して) 構成し、単一のアプリケーション コンテキストでロードすることをお勧めします。