如果我定义同一类的两个 bean 并且没有给出任何范围。那么将创建多少个类的实例。例如
在 applicationContext.xml 中
<bean name="testBean" class="com.test.Example"/>
<bean name="myBean" class="com.test.Example"/>
Spring将创建两个类型的beancom.test.Example
并且自动装配将针对类型或方法名称(或限定符),请参阅春季国际奥委会 http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-factory-autowire
看这个简单的测试:
有了这堂课
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与spring容器测试:
@Resource
TestBean testBean;
@Resource
TestBean myBean;
@Test
public void test() {
assertNotNull(testBean);
assertNotNull(myBean);
assertFalse(testBean == myBean);
assertFalse(testBean.test == myBean.test);
}
这个测试不会失败,正如您所看到的,创建了两个 TestBean 类型的 bean。
请参阅 Spring 文档中的这部分:
byName
按属性名称自动装配。 Spring 寻找与需要自动装配的属性同名的 bean。例如,如果一个 bean 定义设置为按名称自动装配,并且它包含一个 master 属性(即,它有一个 setMaster(..) 方法),Spring 会查找名为 master 的 bean 定义,并使用它来设置财产。
byType
如果容器中恰好存在一个属性类型的 bean,则允许自动装配该属性。如果存在多个,则会抛出致命异常,这表明您不能对该 bean 使用 byType 自动装配。如果没有匹配的 beans,则不会发生任何事情;该属性未设置。
构造函数
类似于 byType,但适用于构造函数参数。如果容器中不存在一个构造函数参数类型的 bean,则会引发致命错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)