Spring Framework の Autowiring 機能を使用すると、オブジェクトの依存関係を暗黙的に注入できます。内部的にはセッターまたはコンストラクターの注入を使用します。
オートワイヤリングを使用してプリミティブ値と文字列値を挿入することはできません。参照のみで機能します。
自動配線の利点
それには、 コードが少なくなる 依存関係を明示的に注入するコードを記述する必要がないためです。
自動配線の欠点
プログラマーの制御はありません。
プリミティブ値や文字列値には使用できません。
自動配線モード
多くの自動配線モードがあります。
Javaは文字列内の文字を置換します
いいえ。 | モード | 説明 |
---|---|---|
1) | いいえ | これはデフォルトの自動配線モードです。これは、デフォルトでは自動配線がないことを意味します。 |
2) | 名前で | byName モードは、Bean の名前に従ってオブジェクトの依存関係を注入します。この場合、プロパティ名とBean名は同じである必要があります。内部的にsetterメソッドを呼び出します。 |
3) | 種類別 | byType モードは、タイプに応じてオブジェクトの依存関係を注入します。したがって、プロパティ名と Bean 名は異なる場合があります。内部的にsetterメソッドを呼び出します。 |
4) | コンストラクタ | コンストラクター モードは、クラスのコンストラクターを呼び出すことによって依存関係を注入します。多数のパラメータを持つコンストラクタを呼び出します。 |
5) | 自動検出 | Spring 3 以降は非推奨になりました。 |
自動配線の例
春に自動配線を使用するための簡単なコードを見てみましょう。 autowire モードを適用するには、Bean 要素の autowire 属性を使用する必要があります。
春の自動配線の完全な例を見てみましょう。この例を作成するために、4 つのファイルを作成しました。
- B.ジャワ
- A.java
- applicationContext.xml
- テスト.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
テスト.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
1) byName 自動配線モード
byName 自動配線モードの場合、Bean ID と参照名は同じである必要があります。
内部的にはセッターインジェクションを使用します。
ただし、Bean の名前を変更すると、依存関係は挿入されません。
Bean の名前を b から b1 に変更するコードを見てみましょう。
2) byType 自動配線モード
byType 自動配線モードの場合、Bean ID と参照名は異なる場合があります。ただし、1 つのタイプの Bean は 1 つだけである必要があります。
内部的にはセッターインジェクションを使用します。
この場合、B タイプのインスタンスを作成しているため、正常に動作します。 Bean 名が参照名と異なっていても問題ありません。
ただし、1 つのタイプの Bean が複数ある場合は機能せず、例外がスローされます。
タイプ B の Bean がたくさんあるコードを見てみましょう。
このような場合、例外がスローされます。
3) コンストラクター自動配線モード
コンストラクター自動配線モードの場合、スプリング コンテナーは最上位のパラメーター化されたコンストラクターによって依存関係を注入します。
ラヴェルはPythonで何をしますか
クラスに 3 つのコンストラクター (引数ゼロ、引数 1 および引数 2) がある場合、注入は引数 2 のコンストラクターを呼び出すことによって実行されます。
4) 自動配線モードなし
自動配線モードがない場合、Spring コンテナーは自動配線によって依存関係を注入しません。