春季:配置

PeM*_*eMa 1 spring spring-java-config

在Spring Java配置中,假设我想@Bean在另一个@Bean定义中重复使用a 。我可以在一个文件中执行此操作:

@Bean
public A buildA() {
    return new A();
}

@Bean
public B buildB() {
    return new B(buildA());
}
Run Code Online (Sandbox Code Playgroud)

或者我可以在一个文件中配置A,然后在另一个文件中将其自动连接,例如(为简洁起见,请使用字段注入):

@Autowired
private A a;

@Bean
public B buildB() {
    return new B(a);
}
Run Code Online (Sandbox Code Playgroud)

我想知道这两种可能性是否完全相同?对我来说,第一个版本可能会使A两次虚假,而第二个版本则不会。

我问这个问题,因为在我的特殊用例中,A正在建立与消息传递代理的连接,并且我有几个B在消耗流(我是.toReactivePublisher()从A中的Spring集成中使用的),并且我不想连接两次或更多给经纪人。

Syn*_*ync 5

是的,它们是完全一样的。多次调用带@Bean注释的方法将不会创建同一bean的多个实例。

有关为何不发生这种情况的说明,请参见此答案