多个bean引用相同的Singleton Bean

时间:2014-07-26 07:27:11

标签: spring singleton

我创建了两个引用同一个类的bean ID,如下所示。我让bean1有一个单例范围,默认bean2也是单例。在这种情况下执行时。

  1. 当我调用bean中的任何一个时,是否会初始化两个bean?

  2. 是否会为每个创建两个单独的对象?

    <bean id="bean1" class="com.skanda.spring.core.ioc.HelloService"
     scope="singleton" />
    
    <bean id="bean2" class="com.skanda.spring.core.ioc.HelloService">
    </bean>
    
  3. 呼叫豆

    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

1 个答案:

答案 0 :(得分:1)

您宣布了两个单身人士,因此您可能有两个HelloService个实例。如果您使用了ApplicationContext,则两者都会在应用程序上下文的刷新时初始化bean。

您只使用BeanFactory,因此您没有预初始化(无刷新)。当你调用beans.getBean("bean1"); Spring初始化单例bean1时,如果有的话,它会初始化它的依赖性。由于它没有依赖性,因此只会创建bean1,只有在调用bean2时才会创建beans.getBean("bean2");,或者如果Spring必须创建它来解析另一个bean的依赖性