44

私の同僚は、「アプリケーション コンテキスト」という言葉をよく使います。多くの記事で、このコロケーションも非常に頻繁に使用されています。

私の現在の理解: アプリケーション コンテキストは単一の xml ファイルです。

しかし、私が正しければ、人々は構成 xml ファイルの代わりに「アプリケーション コンテキスト」を使用しないことを理解しています。

この問題に対処するのを手伝ってもらえますか?

4

3 に答える 3

36

@feak は、ApplicationContextSpring に関する の意味について率直な回答を提供します。つまり、構成 (通常は 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、アプリケーション コンテキストがロードされるため、アプリケーションのWEB-INF フォルダーにspringapp-servlet.xmlファイルを作成するだけで済みます。

アプリケーション コンテキストは、単一の構成(XML ベースかどうかに関係なく) に関連付けられていることに注意してください。限目。


これを理解すると、アプリケーションごとに複数のアプリケーション コンテキストを持つことができることも理解できます。ApplicationContextこれは、同じアプリケーションに2 つ以上の があることです。コンソール アプリケーションの最後の例から、これは簡単に確認できます。

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から複数回取得すると同じBean インスタンスcontextが返されることを意味します。Bar

これは良い習慣ですか、それとも悪い習慣ですか?どちらも、解決する問題によって異なります(最後の例の場合、それは悪い習慣だと思います)。ほとんどの人は、すべての Bean を 1 か所で (XML または別の方法で) 構成し、1 つのアプリケーション コンテキストでロードすることをお勧めします。

于 2013-10-27T08:38:37.187 に答える