web-dev-qa-db-ja.com

アプリケーションコンテキスト。これは何ですか?

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

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

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

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

26
homeAccount

@feakは、Springの観点から ApplicationContext の意味について直接答えます。要するに、設定をロードするオブジェクトです(通常は 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...
        }
    }
    
  • Java Webアプリケーションの場合、DispatchServletはアプリケーションコンテキストをロードするため、springapp-アプリケーションのWEB-INFフォルダーにあるservlet.xmlファイル。

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


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

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つのアプリケーションコンテキストがあることに注意してください。あなたはこれができますか?はい、実際にここで見ています。では、違いは何ですか? mainの違いは、Spring Beanのシングルトンスコープはアプリケーションコンテキストごとにシングルトンであることです 、これは、BarからapplicationContext.xmlファイルで設定されたcontext Beanを取得するとき、同じではないことを意味しますcontext2から取得しますが、contextからいくつか取得すると、同じBar Beanインスタンスが返されます。

これは良い習慣か悪い習慣ですか? どちらでもない、解決される問題に依存する(最後の例の場合、badプラクティス)。ほとんどの人は、すべてのBeanを単一の場所(XMLなど)で構成し、単一のアプリケーションコンテキストでロードすることをお勧めします。

25
Luiggi Mendoza

あなたの同僚は、ロードされたSpringアプリケーションコンテキストを意味し、次へのアクセスを可能にしていると思います:

  • アプリケーションの構成、
  • 初期化されたBean、
  • アプリケーションイベントAPI、
1
kemenov