我创建了两个 bean id 引用如下相同的类。我使 bean1 具有单例范围,并将 bean2 也默认为单例。在这种情况下执行时。
<bean id="bean1" class="com.skanda.spring.core.ioc.HelloService"
scope="singleton" />
<bean id="bean2" class="com.skanda.spring.core.ioc.HelloService">
</bean>
调用 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");
}
请指教。
谢谢,斯坎达
最佳答案
您声明了两个单例,因此您可能有两个 HelloService
实例.如果您使用了 ApplicationContext
,两者都会在应用程序上下文的刷新时初始化 bean。
您只使用 BeanFactory,因此您没有预初始化(没有刷新)。当您调用 beans.getBean("bean1");
Spring初始化单例bean1
如果有的话,它会初始化它的依赖。因为它没有依赖,只有 bean1
将被创建,并且 bean2
只有当您调用 beans.getBean("bean2");
时才会创建,或者如果 Spring 必须创建它来解决另一个 bean 的依赖关系。
关于spring - 多个 bean 引用同一个 Singleton Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24968652/