我创建了两个引用同一个类的bean ID,如下所示。我让bean1有一个单例范围,默认bean2也是单例。在这种情况下执行时。
当我调用bean中的任何一个时,是否会初始化两个bean?
是否会为每个创建两个单独的对象?
<bean id="bean1" class="com.skanda.spring.core.ioc.HelloService"
scope="singleton" />
<bean id="bean2" class="com.skanda.spring.core.ioc.HelloService">
</bean>
呼叫豆
public static void main(String[] args) {
BeanFactory beans = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(
(BeanDefinitionRegistry) beans);
reader.loadBeanDefinitions(new ClassPathResource("mybeans.xml"));
HelloService service = (HelloService) beans.getBean("bean1");
}
请告知。
Thxs,Skanda
答案 0 :(得分:1)
您宣布了两个单身人士,因此您可能有两个HelloService
个实例。如果您使用了ApplicationContext
,则两者都会在应用程序上下文的刷新时初始化bean。
您只使用BeanFactory,因此您没有预初始化(无刷新)。当你调用beans.getBean("bean1");
Spring初始化单例bean1
时,如果有的话,它会初始化它的依赖性。由于它没有依赖性,因此只会创建bean1
,只有在调用bean2
时才会创建beans.getBean("bean2");
,或者如果Spring必须创建它来解析另一个bean的依赖性