为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

摇曳的蔷薇 2022-07-27 20:17:37
我看到了很多这样的例子(选项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。)?
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

根本没有理由使用选项 1。我什至不知道这个符号是什么时候第一次使用的。
然而,与你想象的不同,这

a().makeB();

实际上并没有a()直接调用该方法。
选项 1实际上并没有创建该类的另一个实例,而是调用被代理,并且如果没有Bean存在,则创建 Bean(到达方法),或者如果是单例,则重新使用。谢谢BeanFactory

CGLIB在后台为你做了很多。

intercept:319, ConfigurationClassEnhancer$BeanMethodInterceptor

//img1.sycdn.imooc.com//62e12cfd0001ac2210980425.jpg

无论如何,就 IDE 内部的简单性和可用性而言,选项 2始终是要走的路。
使用选项 2,您还可以清楚地看到Bean依赖关系

解决性能问题,不,没有真正的区别。你不应该真正担心那些小细节。Spring 在任何地方都使用代理/拦截器


查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号