English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
オンラインツール
Springフレームワークの自動構成機能を使用すると、オブジェクト依存関係を暗黙に注入できます。内部でsetterやコンストラクタを通じて注入します。
自動構成の利点 必要です少ないコード
自動構成の欠点
これは原始値や文字列値には使用できません。プログラマーの制御を得ません。
自動構成パターンはたくさんあります:
パターン | 説明 |
no | これはデフォルトの自動構成モードです。これは、デフォルトでは自動構成が無効であることを意味します。 |
byName | byNameパターンは、beanの名前に基づいてオブジェクト依存関係を注入します。この場合、属性名とbean名は同じでなければなりません。内部でsetterメソッドを呼び出します。 |
byType | byTypeパターンは、オブジェクト依存関係を型に基づいて注入します。したがって、属性名とbean名は異なることができます。内部でsetterメソッドを呼び出します。 |
constructor | コンストラクタパターンは、クラスのコンストラクタを呼び出して依存関係を注入します。多くの引数を持つコンストラクタを呼び出します。 |
autodetect | Springから 3始めは推奨されていませんでした。 |
Springで自動構成を使用する簡単なコードを見てみましょう。自動構成モードを適用するには、bean要素のautowire属性を使用する必要があります。
<bean id="a" class="org.sssit.A" autowire="byName"></bean>
Springの自動接続の完全な例を見てみましょう。この例を作成するために、以下のものを作成しました。4のファイル。
B.java A.java applicationContext.xml Test.java
B.java
このクラスにはコンストラクタとメソッドのみが含まれています。
package org.sssit; public class B { B(){System.out.println("b is created");} void print(){System.out.println("hello b");} }
A.java
このクラスにはBクラスの参照およびコンストラクタとメソッドが含まれています。
package org.sssit; public class A { B b; A(){System.out.println("a is created");} public B getB() { return b; } public void setB(B b) { this.b = b; } void print(){System.out.println("hello a");} void display(){ print(); b.print(); } }
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="b" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="byName"></bean> </beans>
Test.java
このクラスはapplicationContext.xmlファイルからBeanを取得し、表示メソッドを呼び出します。
package org.sssit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); A a=context.getBean("a",A.class); a.display(); } }
出力:
b is created a is created hello a hello b
byName自動アセンブリモードでは、bean IDと参照名が同じでなければなりません。
内部でsetter注入を使用しています。
<bean id="b" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="byName"></bean>
しかし、beanの名前を変更すると、依存関係が注入されません。
beanの名前をbからbに変更する方法を見てみましょう1のコード。
<bean id="b1" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="byName"></bean>
byType自動アセンブリモードでは、bean IDと参照名が異なることがあります。しかし、1つの種類のbeanしか存在しません。
setter注入を使用して内部で処理されます。
<bean id="b1" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="byType"></bean>
この場合、通常動作します。なぜなら、B型のインスタンスを作成しているからです。Beanの名前と異なるBeanの名前を使用することもできます。
しかし、同じタイプの複数のbeanを持っている場合、それが機能せず例外が発生します。
コードには多くのB型のbeanがあります。
<bean id="b1" class="org.sssit.B"></bean> <bean id="b2" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="byName"></bean>
この場合、例外が発生します。
コンストラクタ自動コンフィギュレーションモードでは、spring コンテナは最高のパラメータ化されたコンストラクタを通じて依存注入を行います。
クラスの中で3いくつかのコンストラクタがあります。ゼロ引数、1引数、2引数のコンストラクタがあり、その後、2引数のコンストラクタを呼び出して注入を実行します。
<bean id="b" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="constructor"></bean>
自動コンフィギュレーションモードがない場合、spring コンテナは依存注入を行わない。
<bean id="b" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="no"></bean>