スプリングIOC(コントロール反転コントロールコンテナの反転
IOCコンテナを理解する簡単なためA、
Javaでプログラム内のオブジェクトではなく、オブジェクトの内部管理よりも、コンテナの管理を開発します。
IOCコンテナを理解し、分析するために、2つの簡単な質問は、だから、
1.なぜそれが逆と呼ばれています。
IOCコンテナ実装は、受動的に(そのようなクラスのメインメソッドで新しい文字列オブジェクトとして)内部オブジェクトによって直接管理する管理オブジェクトを作成し、容器内に注入されます。オブジェクト管理アプローチへのこの変更は逆と呼ばれます。
2.どのようなコントロール:
IOCのコンテナが統一制御を得るために、外部リソースは、(オブジェクトを含まない、他のファイルがあります)
(Qiaoxia黒板:だけでなく、春のために設計されたスプリングIOCコンテナベースのため、IOCコンテナがコンテナであるが、容器は、バネIOCコンテナでないフレームワーク)
第二に、アプリケーションコンテキスト
私たちは今、手の杖(IOCコンテナ)を持っているが、我々はまた、杖を駆動するために、対応する呪文(アプリケーションコンテキスト)が必要です
春のコンテナは、2つの実装があります。
1.最も基本的たBeanFactory(物理プラント)私は頻繁に使用しないように、あまりにも簡単なので、
2.我々は、いくつかのアプリケーション・コンテキストを設計し、さまざまなシナリオによれば、ばね、抽象インタフェースのApplicationContextであるアプリケーションコンテキストたBeanFactory種々の由来しました:
(1)AnnotationConfigApplicationContext:1つ以上の構成クラスのJavaベースのコンテキストの定義からロードされ、方法は、Javaアノテーションにも適用可能です。
(2)ClassPathXmlApplicationContext:クラスパス、XMLコンフィギュレーションの適切な方法で一つ以上のコンテキスト定義のXML構成ファイルからロードされました。
(3)FileSystemXmlApplicationContext:XML構成ファイル・システム・ドライブにロードされたファイルシステム内の1つまたは複数のコンテキスト定義のXML構成ファイルからロードされました。
(4)AnnotationConfigWebApplicationContextは:具体的にWebアプリケーションの注釈モードのために準備しました。
第三に、簡単に実現IOC制御対象
アプリケーションコンテキストapplicationContext_ioc.xmlを作成します。1.
<?xmlのバージョン= " 1.0 "エンコード= " UTF-8 "?> <豆のxmlns = " http://www.springframework.org/schema/beans " のxmlns:UTIL = " http://www.springframework.org /スキーマ/ UTIL " のxmlns:コンテキスト = " http://www.springframework.org/schema/context " のxmlns:AOP = " http://www.springframework.org/schema/aop " のxmlns:XSI = " のhttp: //www.w3.org/2001/XMLSchema-instance " のxmlns:P = "http://www.springframework.org/schema/p " XSI:のschemaLocation = " http://www.springframework.org/schema/beans ます。https:// www.springframework.org/schema/beans/spring-beans。 XSD のhttp:// www.springframework.org/schema/context ます。https:// www.springframework.org/schema/context/spring-context.xsd ます。http:// www.springframework.org/schema/aop ます。https:// www.springframework.org/schema/aop/spring-aop.xsd ます。http:// www.springframework.org/schema/util ます。http://www.springframework.org/schema/util/spring-util.xsd " > <豆>
クラスの学生を作成します。2.
パッケージspring.ioc.unities。 パブリック クラス学生{ プライベート文字列stuNo。 プライベート文字列stuName。 プライベート int型性別; プライベート文字列nativePlace。 プライベート文字列classNo。 プライベート文字列TEL; パブリック文字列getStuNo(){ 戻りstuNoと、 } 公共 ボイドsetStuNo(文字列stuNo){ この .stuNo = stuNo。 } パブリック文字列getStuName(){ 戻りstuName。 } パブリック ボイドsetStuName(文字列stuName){ この .stuName = stuName。 } 公共 INT getGender(){ 戻り性別。 } 公共 ボイド setGender(int型性別){ この .gender = ジェンダー。 } パブリック文字列getNativePlace(){ 戻りnativePlaceと、 } 公共 ボイドsetNativePlace(文字列nativePlace){ この .nativePlace = nativePlace。 } パブリック文字列getClassNo(){ 返すclassNoを。 } 公共 ボイドsetClassNo(文字列classNo){ この .classNo = classNo。 } パブリック文字列getTel(){ 戻りTEL。 } 公共 ボイドsetTel(文字電話){ このドットテル= TEL。 } @Override パブリック文字列のtoString(){ リターン " 学生[stuNo = " + stuNo + "stuName = " + stuName + " 性別= " +性別+ "、nativePlace = " + nativePlace + " 、classNo = " + classNo + " 、TEL = " + TEL + " ] " ; } }
豆タグによって二つの制御XMLビーン3.
(1)必要な2つのプロパティをラベル付け
ID(Beanコンテナを識別するためのIOC)
クラス(IDに対応するクラスの位置は、通常パッケージ名+クラス名は、直接コピーを持つことになり、手書きが間違っている可能性があります)
<ビーンID = " STU1 " クラス = " spring.ioc.unities.Student " > </豆>
(2)その他のプロパティタグ
scope属性:
スコープ | 説明 |
シングルトン | 春IOCコンテナ、Bean定義のオブジェクトインスタンスはデフォルトの初期化が開始されるだけになったコンテナ
|
プロトタイプ | すべての買収は、Beanコンテナから新しいオブジェクトであります |
要求 | すべてのHTTP要求は、新しいBeanを作成し、使用のみWebApplicationContext |
セッション | 同様の要求、新しいセッションが新しいBeanを作成しますたびに、唯一のWebApplicationContextを使用 |
3.main機能検査を確認しました:
パブリック 静的 ボイドメイン(文字列[]引数){ ApplicationContextのIOC = 新しい新 ClassPathXmlApplicationContext(" applictionContext_ioc.xml " ); 学生Stuaの =(学生)ioc.getBean(" STU1 " ); 学生スタブ =(学生)ioc.getBean(" STU1 " ); // 豆にIOCに取得: システム。OUTの .println(" シングルトンBeanのプロパティを取得----------------------- - " ); 。システムOUT .println(stuA.toString()+stuB.toString()); // Aの検証、Bは同一のエンティティであるかの システム。OUT .println(" Stuaのは、それがスタブと豆であるかどうか:" +(== Stuaのスタブ)); 学生STUC =(学生)IOC .getBean(" STU2 " ); 学生STUD =(学生)ioc.getBean(" STU2 " ); 。システムOUTの .println(「プロトタイプBeanにプロパティを取得します------------- ----------------------- " ); 。システムOUT .println(stuC.toStringは()+ stuD.toString()); 。システムOUTの .println(" STUCスタッドと豆かどうか:" +(STUC == スタッド)); }
次のように得られた結果は以下のとおりです。
シングルトンの属性豆豆シングルトン実際に見ることができます。