同じクラスの 2 つの Bean を定義していて、スコープを与えていない場合。次に、作成されるクラスのインスタンスの数。例えば
applicationContext.xml で
<bean name="testBean" class="com.test.Example"/>
<bean name="myBean" class="com.test.Example"/>
同じクラスの 2 つの Bean を定義していて、スコープを与えていない場合。次に、作成されるクラスのインスタンスの数。例えば
applicationContext.xml で
<bean name="testBean" class="com.test.Example"/>
<bean name="myBean" class="com.test.Example"/>
Spring はそのタイプの 2 つの Bean を作成com.test.Example
し、自動配線はタイプまたはメソッド名 (または修飾子) 用になります。Spring IOCを参照してください。
この簡単なテストを参照してください。
このクラスで
public static class TestBean {
static int INT = 1;
public int test;
public TestBean() {
test = INT++;
}
}
設定 XML:
<bean name="testBean" class="com.test.TestBean"/>
<bean name="myBean" class="com.test.TestBean"/>
JUnit4 とスプリング コンテナー テスト:
@Resource
TestBean testBean;
@Resource
TestBean myBean;
@Test
public void test() {
assertNotNull(testBean);
assertNotNull(myBean);
assertFalse(testBean == myBean);
assertFalse(testBean.test == myBean.test);
}
ご覧のとおり、このテストは失敗しません。TestBean タイプの 2 つの Bean が作成されます。
Spring Doc のこの部分を参照してください。
byName
プロパティ名による自動配線。Spring は、オートワイヤーが必要なプロパティと同じ名前の Bean を探します。たとえば、Bean 定義が名前で autowire に設定されていて、マスター プロパティが含まれている (つまり、setMaster(..) メソッドがある) 場合、Spring は master という名前の Bean 定義を探し、それを使用して財産。byType
プロパティ タイプの Bean がコンテナに 1 つだけ存在する場合、プロパティを自動配線できます。複数存在する場合、致命的な例外がスローされます。これは、その Bean に対して byType オートワイヤリングを使用できないことを示します。一致する Bean がない場合、何も起こりません。プロパティが設定されていません。constructor
byType に似ていますが、コンストラクターの引数に適用されます。コンテナー内にコンストラクター引数タイプの Bean が 1 つだけ存在しない場合、致命的なエラーが発生します。
このシナリオでは、Spring は 2 つのインスタンスを作成します。Spring コンテナーは、Bean 定義ごとにシングルトン インスタンスを作成します。
getContext.getBean("testBean") を呼び出すと、常に testBean Bean 定義の同じインスタンスが提供されます
getContext.getBean("myBean") を呼び出すと、常に myBean Bean 定義の同じインスタンスが提供されます。