ApplicationContextのは、理解します
初期化処理SpringApplication記事、我々はApplicationContextの初期化処理を導入し、綿密な導入に伴い、我々はアプリケーションコンテキストのヘルプが新たな問題を作成していないことができ、それが何であるかを最終的に、なぜ初期化時から始める必要があります。
簡単な紹介をここに。
それがしたい場合は春のように多くのオブジェクトを作成するアプリケーションの管理を担当するオブジェクトを従事するために特別な場所がなければならないとして、Appleは、非常に多くの携帯電話(オブジェクト)を生成するように、。このようFoxconnのように、と呼ばれる場所で、アップルの携帯電話の生産工場が、ソフトウェア開発では、地元の春に従事することは、我々は工場と呼ばれ、コンテナと呼ばれることはないオブジェクト。はい、Javaでのコンテナの概念は、あなたは、Tomcatよりも最も精通している、そしてそれは、サーブレットは、Webコンテナを実行しているが、春の依存性注入の機能を実現するために、あなたはコンテナオブジェクトの生成なしで行うことはできません-何のコンテナが存在しない場合管理オブジェクトを作成するための責任がある、あなたのコードは、ああ、あなたを与えるためにどこにもオブジェクト、春を呼ぶべきではありません。作成、アセンブリ、破壊された-実際には、コンテナは、機能を実現するコアSpringフレームワークで、コンテナはちょうど私達が簡単なので、オブジェクトの作成を支援しません、それはライフサイクル全体でのオブジェクトの管理を担当しています。あなたはこのコンテナの春について最も頻繁に聞く用語は、IOCコンテナです。IOCは、制御プログラミングのアイデアの反転と呼ばれている、いわゆる、インターネットを理解することは非常に簡単に要約している、と私は何気なく説明しません。言葉では、私のアプリケーションは、もはやオブジェクトを作成および管理するためのオブジェクト間の依存関係を気にせず、IOCコンテナは春の経営支配を持っていると言うことです仕事の権利、私のオブジェクトの作成を、やってみましょうました権利を制御する逆なので、コンテナは春IOCコンテナと呼ばれることができるコンテナ、。しかし、私は一つのことを明確にしたい:春IOCコンテナと呼ばれているだけのコンテナ言うことではないが、コンテナベースのフレームワークIOC春特有の、多くはないがあります。
さて、最後に述べ、それについてSpringコンテナセットの概念が、それは卵何を使用ですか?あなたが実際に何もできない光のコンテナ!あなたはジングル猫の目の前に宝の袋のようなもののSFコンテナを、と思いますか、それはあなたが何をしたい何を与えるのだろうか?実際には、容器内部の何も、コンテナは、ちょうど私達にのみ管理対象オブジェクト・スペースを提供するために、コンテナを与え、オブジェクトの内側に配置することは、オブジェクト間の私たち自身の意思決定の依存関係ですが、また、私たち自身のものを決定しません。だから、どのように我々はそれに代わってコンテナオブジェクトの管理に私たちのコンテナを配置する必要がありますか?これは、Springコンテキストを適用することを含みます。そのアプリケーションのコンテキストとは何ですか、あなたは単に達成を理解することができ、あなたが一種類とてもコンテナにオブジェクトを管理しやすくするために、春が必要になります。。一種。。金額。。コンテナオブジェクト-はい、Springコンテナの抽象表現であるアプリケーションコンテキスト、と私たちは共通のApplicationContextに言って、実質的に豆やオブジェクトの定義間の協力関係を維持するために、高レベルのインタフェースです。量は、非常に抽象的一口鳴りませんか?そして、あなたはそれを再読しました。。。
ここでは、明確にする必要があり、春のコアは容器であり、容器が一意でない場合、フレームワーク自体は、コンテナの数の実装を提供し、大きく2種類に分ける:一つは、一般的に最も単純な容器であるたBeanFactoryを、使用されません基本的なDI機能を提供し、もう一つは、抽象インターフェースは、我々は、上記のものであり、たBeanFactory後由来継承アプリケーションコンテキストにあるのApplicationContext、それはより多くのエンタープライズレベルのサービスを提供することができるような構成を解析するように、最も一般的なコンテキストインスタンスオブジェクトのシナリオであるようにテキストメッセージや、。コンテキストオブジェクトを使用すると、我々はSpringコンテナを管理する必要のオブジェクトを登録することができるようになります。私たちは、さまざまなシナリオのどちらかを選択するためのコンテキスト抽象インタフェースでは、春にはまた、達成するために、容器の種類の様々なを提供してくれます-
- AnnotationConfigApplicationContext:1つ以上の構成クラスのJavaベースのコンテキストの定義からロードされ、方法は、Javaアノテーションにも適用可能です。
- ClassPathXmlApplicationContext:クラスパス、XMLコンフィギュレーションの適切な方法で1つ以上のXML構成ファイルからロードコンテキスト定義。
- FileSystemXmlApplicationContext:XML構成ファイル・システム・ドライブにロードされたファイルシステム内の1つ以上のXML構成ファイルからロードコンテキスト定義。
- AnnotationConfigWebApplicationContext:特に注釈モードのために用意したWebアプリケーションのための、
- XmlWebApplicationContext:xml構成のためのWebアプリケーションまたは複数のXML設定ファイルからロードコンテキストの定義。
この上に、私の記事の中で春-たBeanFactory(1)が挙げられます。
上記を理解した上で、問題は非常に簡単です。あなたはちょうどその(我々はすべての呼び出しは、Beanを尋ね春)、構成された豆との協力関係、短期では、あなたがオブジェクトを管理したい、あなたはIOCコンテナ、XMLベースの管理言及する価値のために必要なJavaオブジェクトノートまたはあなたがあなたのプログラムのためにしたいオブジェクトに管理サービスを提供することができます私たちの春のコンテナにロードされたアプリケーション・コンテキスト・オブジェクトを使用して。
ApplicationListenerを悟ら
ApplicationContextのイベントメカニズムは、クラスとApplicationEvent ApplicationListenerインタフェースを介してオブザーバデザインパターンは、ApplicationContextのイベント処理を可能にしています。
これはApplicationListenerソースです。
@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
void onApplicationEvent(E var1);
}
ここでは単純なカスタムイベントによって示されています:
あなたは、イベントをカスタマイズして、手動でビジネスプロセスを終えた後に送信することができます。同上は、モニターへのインターフェースを統合し、イベントがビジネスプロセスを受信します
イベント定義:
public class EmailEvent extends ApplicationEvent{
private String address;
private String text;
public EmailEvent(Object source, String address, String text){
super(source);
this.address = address;
this.text = text;
}
public EmailEvent(Object source) {
super(source);
}
//......address和text的setter、getter
}
モニターの定義
public class EmailNotifier implements ApplicationListener{
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof EmailEvent) {
EmailEvent emailEvent = (EmailEvent)event;
System.out.println("邮件地址:" + emailEvent.getAddress());
System.our.println("邮件内容:" + emailEvent.getText());
} else {
System.our.println("容器本身事件:" + event);
}
}
}
ビジネストリガー
public class SpringTest {
public static void main(String args[]){
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
//创建一个ApplicationEvent对象
EmailEvent event = new EmailEvent("hello","[email protected]","This is a test");
//主动触发该事件
context.publishEvent(event);
}
そして、内蔵のイベントをいくつかご紹介: