English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring オートコンフィギュレーション

オンラインツール

Springフレームワークの自動構成機能を使用すると、オブジェクト依存関係を暗黙に注入できます。内部でsetterやコンストラクタを通じて注入します。

自動構成は基本値や文字列値には使用できません。参照のみに適用されます。

自動構成の利点 必要です少ないコード

、依存関係を明示的に注入するコードを書く必要がありません。

自動構成の欠点

これは原始値や文字列値には使用できません。プログラマーの制御を得ません。

自動構成パターン

自動構成パターンはたくさんあります:

パターン説明
noこれはデフォルトの自動構成モードです。これは、デフォルトでは自動構成が無効であることを意味します。
byNamebyNameパターンは、beanの名前に基づいてオブジェクト依存関係を注入します。この場合、属性名とbean名は同じでなければなりません。内部でsetterメソッドを呼び出します。
byTypebyTypeパターンは、オブジェクト依存関係を型に基づいて注入します。したがって、属性名とbean名は異なることができます。内部でsetterメソッドを呼び出します。
constructorコンストラクタパターンは、クラスのコンストラクタを呼び出して依存関係を注入します。多くの引数を持つコンストラクタを呼び出します。
autodetectSpringから 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

1)byName自動アセンブリモード

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>

2)byType自動アセンブリモード

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>

この場合、例外が発生します。

3)コンストラクタ自動コンフィギュレーションモード

コンストラクタ自動コンフィギュレーションモードでは、spring コンテナは最高のパラメータ化されたコンストラクタを通じて依存注入を行います。

クラスの中で3いくつかのコンストラクタがあります。ゼロ引数、1引数、2引数のコンストラクタがあり、その後、2引数のコンストラクタを呼び出して注入を実行します。

<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="constructor"></bean>

4)自動コンフィギュレーションモードがありません

自動コンフィギュレーションモードがない場合、spring コンテナは依存注入を行わない。

<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="no"></bean>