spring - 多个 bean 引用同一个 Singleton Bean

标签 spring singleton

我创建了两个 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>
    

  • 调用 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/

    相关文章:

    spring - 在已安装并运行 Tomcat 时使用 Spring Framework Web

    spring - org.hibernate.QueryException : Space is not allowed after parameter prefix ':'

    java - 递归 ORM 类的 Spring Repository 性能问题

    java - 保存单例对象

    java - 单例类中私有(private)静态变量和私有(private)实例变量有什么区别?

    java - 单例操作与多实例操作

    c# - C# 问题中的单例模式

    java - 我的 Quartz cron 表达式有什么问题? 6 :30 Am, 上午 9 点、中午 12 点、下午 2 点

    java - Spring data rest 发布具有多对多关系的新项目

    c++ - C++ 中的静态对象与单例类对象?