Java springboot:多次调用@Bean方法

Java springboot:多次调用@Bean方法,java,spring,spring-boot,Java,Spring,Spring Boot,假设我们有一个方法来创建一些bean @Bean MongoClient getMongo(){} 偶尔,我会在示例中看到人们在想要使用bean时多次调用方法本身(在我们的示例中getMongo()) Spring Boot是否以某种方式只允许创建bean一次,还是每次调用该方法都会创建bean?实际上,每次都会得到相同的对象。如前所述,SpringBeans的默认作用域是singleton,这意味着SpringContainer中只有一个类实例 为什么每次都收到相同的对象? 这是因为您在类中使

假设我们有一个方法来创建一些bean

@Bean MongoClient getMongo(){}

偶尔,我会在示例中看到人们在想要使用bean时多次调用方法本身(在我们的示例中
getMongo()


Spring Boot是否以某种方式只允许创建bean一次,还是每次调用该方法都会创建bean?

实际上,每次都会得到相同的对象。如前所述,SpringBeans的默认作用域是singleton,这意味着SpringContainer中只有一个类实例

为什么每次都收到相同的对象?

这是因为您在类中使用的@Configuration注释涉及代理的创建(代理是用@Configuration注释的类的子类)。这个代理存储singleton并在您调用@Bean方法时返回对它的引用

为什么@Bean方法返回引用而不是在实现中创建对象?


代理也会覆盖@Bean方法。

实际上,每次获得相同的对象时。如前所述,SpringBeans的默认作用域是singleton,这意味着SpringContainer中只有一个类实例

为什么每次都收到相同的对象?

这是因为您在类中使用的@Configuration注释涉及代理的创建(代理是用@Configuration注释的类的子类)。这个代理存储singleton并在您调用@Bean方法时返回对它的引用

为什么@Bean方法返回引用而不是在实现中创建对象?


代理也会覆盖你的@Bean方法。

默认的Bean范围是。我当然知道,但是如果你有一些代码调用两次
getMongo
——那么会发生什么情况?你会得到两个单例。开玩笑吧,那太可怕了。您得到的是相同的单例对象。默认的bean范围是。我当然知道,但是如果您有一些代码调用两次
getMongo
-在这种情况下会发生什么?您得到两个单例。开玩笑吧,那太可怕了。你得到了相同的单例对象,这就是Spring的魔力。谢谢我在哪里可以进一步了解这一点?这就是春天的魔力是如何发挥作用的。谢谢我在哪里可以进一步了解这一点?