著者:陳Buyi
www.cnblogs.com/chenbenbuyi
記事の春シリーズ
(1)学習のレビューを--Spring Springコンテナとアプリケーションコンテキストを完全に理解
学習のレビューを--Spring(2)DI / IOCとAOP原則の知人を
(3)自動組立豆-春後ろ向き研究
のJavaから(4)注釈およびXMLコンフィギュレーション・アセンブリ豆-春後ろ向き研究
--Springレビューを学ぶ学ぶために(5)AOPプログラミング--Springレビューセクション
あなたは春、道による依存性注入をしたら、私たちのビジネスのコードでは、関連するオブジェクトのライフサイクルを管理する必要はありません。春はあなたのオブジェクトに非常に丁寧であるので - ビジネスコードのみ与え、追加のヘルプを必要とする対象、どこ、歩いて、歩いて、ビジネスプロセス自体を実行する必要があり春には、私は反対したい、と述べました。
それは簡単に聞こえる、使用することは困難ではありませんが、これが唯一のイズムであれば、任意の脳料金なしで、かなり無料で簡単です。。。オブジェクトがあなたにある場合しかし、あなたが本当に気にしない、春はありますか?
あなたはより深い春を学びたいのであれば、ただでの使用をしないで、あなたはそれ以外の場合は、このブログあなたはシャベルああを参照して、控訴上の問題について慎重に検討すべきです。。。
それは、オブジェクトを従事するために特別な場所がなければならないとして、Appleは、非常に多くの携帯電話(オブジェクト)を生成するように、非常に多くのオブジェクトを作成するために、アプリケーション管理のための責任になりたい場合は春:あなたはこのことについて考えることができます。などのFoxconnなどと呼ばれる場所で、アップルの携帯電話の生産工場、しかし、地元の春のソフトウェア開発では、私たちは工場と呼ばれ、コンテナと呼ばれるオブジェクトに従事しません。
はい、Javaでのコンテナの概念は、あなたは、Tomcatよりも最も精通している、そしてそれは、Webコンテナを実行するサーブレットですが、春の依存性注入の機能を実現するために、あなたはコンテナオブジェクトの生成なしで行うことはできません - 何のコンテナが存在しない場合管理オブジェクトを作成するための責任がある、あなたのコードは、ああ、あなたを与えるためにどこにもオブジェクト、春を呼ぶべきではありません。作成、アセンブリ、破壊された - 実際には、コンテナは、機能を実現するコアSpringフレームワークで、コンテナはちょうど私達はそう単純なオブジェクトの作成を支援しません、それはライフサイクル全体でのオブジェクトの管理を担当しています。
あなたはこのコンテナの春について最も頻繁に聞く用語は、IOCコンテナです。いわゆるIOCは、制御プログラミングのアイデアの反転と呼ばれ、インターネットを理解することは非常に簡単に要約している、と私は何気なく説明しません。言葉では、私のアプリケーションは、もはやオブジェクトを作成および管理するためのオブジェクト間の依存関係を気にし、IOCコンテナは右の仕事をしてみましょうして、それを言うことはありません、私は、オブジェクト作成、春の経営支配を持っています権利を制御する逆なので、コンテナは春IOCコンテナと呼ばれることができるコンテナ、。けれども、私は一つのことを明確にしたい:春特有の、春IOCコンテナと呼ばれるだけのコンテナ、コンテナベースのフレームワークIOCが多く存在しているということではないと言うことではありません。
さて、最後にSpringコンテナの概念はそれについて述べたが、どのような使用は、卵のですか?あなたが実際に何もできない光のコンテナ!あなたは空想科学小説のコンテナは、ジングル猫の前の宝袋のように、それはあなたが何をしたい何を与えると思いますか?実際には、容器内部のものは、コンテナオブジェクトの内部に置くために何を決めるには、ちょうど私達にのみ管理対象オブジェクト・スペースを提供するために、コンテナを与え、オブジェクト間の私たち自身の意思決定の依存関係はありませんが、また私たち自身。だから、どのように我々はそれに代わってコンテナオブジェクトの管理に私たちのコンテナを配置する必要がありますか?これは、Springコンテキストを適用することを含みます。
そのアプリケーションのコンテキストとは何ですか、あなたは単に達成を理解することができ、あなたはとても一種類のコンテナにオブジェクトを管理するために春が必要になります。。一種。。金額。。コンテナオブジェクト - はい、それはSpringアプリケーションのコンテキスト・コンテナ抽象的表現であると私たちの共通のApplicationContextに言って、実質的に豆やオブジェクトの定義間の協力関係を維持するために、高レベルのインタフェースです。量は、非常に抽象的一口鳴りませんか?そして、あなたはそれを再読しました。。。
ここでは、明確にする必要があり、春のコアは容器であり、容器が一意でない場合、フレームワーク自体は、コンテナの数の実装を提供し、大きく2種類に分ける:一つは、一般的に最も単純な容器であるたBeanFactoryを、使用されません基本的なDI機能を提供し、もう一つは、我々は、上述のApplicationContext抽象インタフェースであるたBeanFactory後に誘導されたアプリケーションコンテキストを継承することであり、それはこのような構成を解析するなど、よりエンタープライズレベルのサービスを提供することができます最も一般的なコンテキストインスタンスオブジェクトのシナリオであるようにテキストメッセージや、。
コンテキストオブジェクトを使用すると、我々はSpringコンテナを管理する必要のオブジェクトを登録することができるようになります。私たちは、さまざまなシナリオのどちらかを選択するためのコンテキスト抽象インタフェースでは、春にはまた、達成するために、容器の種類の様々なを提供してくれます。
-
①
AnnotationConfigApplicationContext
:1つ以上の構成クラスのJavaベースのコンテキストの定義からロードされ、方法は、Javaアノテーションにも適用可能です。 -
②
ClassPathXmlApplicationContext
:クラスパス内の1つまたは複数のXML構成ファイルからロードコンテキストの定義、XMLコンフィギュレーションの適切な方法、 -
③
FileSystemXmlApplicationContext
:ファイルシステム内の1つまたは複数のXML構成ファイルからロードコンテキスト定義は、それは、XML構成ファイル・システム・ドライブにロードされています。 -
④
AnnotationConfigWebApplicationContext
:特に注釈モードのために用意したWebアプリケーションのための、 -
⑤
XmlWebApplicationContext
:xml構成する1つ以上のコンテキスト定義のXML設定ファイルからWebアプリケーションをロードします。
上記を理解した上で、問題は非常に簡単です。あなただけの、その後、要するに、あなたがオブジェクト(我々はすべてそれがBeanを尋ね呼び出す春)、構成された豆との協力関係を管理したい、あなたが言及する価値があなたのIOCコンテナ、XMLベースの管理のために必要なJavaオブジェクトノートまたはあなたがあなたのプログラムのためにしたいオブジェクトに管理サービスを提供することができます私たちの春のコンテナにロードされたアプリケーション・コンテキスト・オブジェクトを使用して。以下に、またはアプリケーションのコンテキストのそれ簡単なアプリケーションの例を貼り付けます。
XML設定はコンフィグレーションBeanを経由してみようとBean間の協力関係を確立します。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<bean id="man" class="spring.chapter1.domain.Man">
<constructor-arg ref="qqCar" />
</bean>
<bean id="qqCar" class="spring.chapter1.domain.QQCar"/>
</beans>
そして、春が私たちのためにオブジェクトを管理可能にするためにIOCのコンテナアプリケーションコンテキストからコンフィギュレーションをロードし、我々はそれがOKの場合、コンテナからBeanを取得するには、オブジェクトを使用している必要があります。
public class Test {
public static void main(String[] args) {
//加载项目中的spring配置文件到容器
// ApplicationContext context = new ClassPathXmlApplicationContext("resouces/applicationContext.xml");
//加载系统盘中的配置文件到容器
ApplicationContext context = new FileSystemXmlApplicationContext("E:/Spring/applicationContext.xml");
//从容器中获取对象实例
Man man = context.getBean(Man.class);
man.driveCar();
}
}
上記試験は、私は私は、構成ファイルをロードするために適切なコンテキストオブジェクトを使用する必要があり、applicationContext.xmlをプロジェクトと任意のシステムドライブの下に置かれたプロファイルし、最終的な結果は全く同じです。もちろん、今より多くのプロジェクトがアノテーションを使用するので、基本的な方法を指摘します:
//同xml一样描述bean以及bean之间的依赖关系
@Configuration
public class ManConfig {
@Bean
public Man man() {
return new Man(car());
}
@Bean
public Car car() {
return new QQCar();
}
}
public class Test {
public static void main(String[] args) {
//从java注解的配置中加载配置到容器
ApplicationContext context = new AnnotationConfigApplicationContext(ManConfig.class);
//从容器中获取对象实例
Man man = context.getBean(Man.class);
man.driveCar();
}
}
それ以来、春のコンテナおよびアプリケーション・コンテキストでも、ほとんどのだろうゆっくり皆が提供するために、次のブログ記事内の特定のスキルポイントを説明しました。