首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring -自动装配与手动方法调用

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

Stack Overflow用户
提问于 2019-03-09 20:00:39
回答 1查看 147关注 0票数 1

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

代码语言:javascript
复制
@Bean A a(){
  return new A();
}

@Bean B b(){
  return a().makeB();
}

这与(备选案文2)相比有什么好处:

代码语言:javascript
复制
@Bean A a(){
  return new A();
}

@Bean B b(A a){
  return a.makeB();
}

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

是否有其他特别的理由使用选项1(例如。速度,还是一点点)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-09 20:15:48

完全没有理由使用选项1。我甚至不知道这个表示法是什么时候开始使用的。

但是,不像你想的那样,这个

代码语言:javascript
复制
a().makeB();

实际上并不直接调用方法a()

实际上,选项1确实创建了类的另一个实例,而不是,相反,调用是代理的,并且创建了Bean (到达方法),如果没有一个单独的实例,或者重复使用。谢谢BeanFactory

CGLIB在后台为你做了很多事情。

代码语言:javascript
复制
intercept:319, ConfigurationClassEnhancer$BeanMethodInterceptor

无论如何,由于IDE内部的简单易用性问题,选项2总是要走的路。

有了选项2,您还可以清楚地看到Bean的依赖项。

考虑到性能方面的问题,没有真正的区别。你不应该真的担心那些小细节。Spring到处使用代理/拦截器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55081414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档