Spring - 自动装配与手动方法调用

我看到了很多这样的例子(选项1):


@Bean A a(){

  return new A();

}


@Bean B b(){

  return a().makeB();

}

与(选项2)相比,这有什么优势:


@Bean A a(){

  return new A();

}


@Bean B b(A a){

  return a.makeB();

}

据我所知,使用选项 1 更容易在 bean 之间导航(但在 IDE 的支持下,在选项 2 中也很容易做到这一点)。缺点是我猜是耦合,所以在测试中很难覆盖 bean B 中的 bean A,因为它是直接引用的(在选项 1 中)。


是否有任何其他特殊原因使用选项 1(例如速度或 smthn。)?


摇曳的蔷薇
浏览 139回答 1
1回答

温温酱

根本没有理由使用选项 1。我什至不知道这个符号是什么时候第一次使用的。然而,与你想象的不同,这a().makeB();实际上并没有a()直接调用该方法。选项 1实际上并没有创建该类的另一个实例,而是调用被代理,并且如果没有Bean存在,则创建 Bean(到达方法),或者如果是单例,则重新使用。谢谢BeanFactory!CGLIB在后台为你做了很多。intercept:319, ConfigurationClassEnhancer$BeanMethodInterceptor无论如何,就 IDE 内部的简单性和可用性而言,选项 2始终是要走的路。使用选项 2,您还可以清楚地看到Bean的依赖关系。解决性能问题,不,没有真正的区别。你不应该真正担心那些小细节。Spring 在任何地方都使用代理/拦截器。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java