gpt4 book ai didi

java - 调用@Bean 方法会创建对象的新实例还是 bean 实例?

转载 作者:行者123 更新时间:2023-11-30 06:54:43 25 4
gpt4 key购买 nike

在下面的代码中,在 foo.setBar(bar())blah.setBar(bar()) 中调用了 bar() code> 使用 Bar 的两个不同实例?还是使用 Barbean 实例 代替?如果它是一个 bean 实例,Spring 是如何自动完成的?是通过代理实现的吗?

@Configuration
public class AppConfig {
@Bean
public Foo foo() {
Foo foo = new Foo();
foo.setBar(bar());
return foo;
}

@Bean
public Bar bar() {
return new Bar();
}

@Bean
public Blah blah() {
Blah blah = new Blah();
blah.setBar(bar());
return blah;
}
}

最佳答案

Spring 为您的@Configuration 注解类创建一个代理。此代理拦截 @Bean 方法调用并缓存 bean 实例,以便对同一 @Bean 方法的进一步调用引用同一 bean 实例。

因此,在您的情况下,对 bar() 方法的两次调用都引用同一个 Bar 实例。Bar 实例实际上是每个应用程序上下文的单例。这就是为什么 @Bean 方法可见性被限制为 protected 、 package 或 public 的原因,因为Spring 需要在代理中覆盖您的@Bean 方法。

关于java - 调用@Bean 方法会创建对象的新实例还是 bean 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36078153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com