Java Spring-自动布线与手动方法调用
我看到了很多这样的例子(选项1): 与(选项2)相比,此选项有哪些优点: 据我所知,使用选项1可以更容易地在bean之间导航(但有了IDE的支持,在选项2中也同样容易做到)。缺点是我猜是耦合,所以在测试中很难在bean B中覆盖bean A,因为它是直接引用的(在选项1中)Java Spring-自动布线与手动方法调用,java,spring,Java,Spring,我看到了很多这样的例子(选项1): 与(选项2)相比,此选项有哪些优点: 据我所知,使用选项1可以更容易地在bean之间导航(但有了IDE的支持,在选项2中也同样容易做到)。缺点是我猜是耦合,所以在测试中很难在bean B中覆盖bean A,因为它是直接引用的(在选项1中) 使用选项1(如速度或smthn)还有其他特殊原因吗?没有任何理由使用选项1。 我甚至不知道这个符号是什么时候开始使用的。 然而,与你所想的不同,这 a().makeB(); 实际上不直接调用方法a()。 选项1实际上并不创
使用选项1(如速度或smthn)还有其他特殊原因吗?没有任何理由使用选项1。 我甚至不知道这个符号是什么时候开始使用的。
然而,与你所想的不同,这
a().makeB();
实际上不直接调用方法a()
。选项1实际上并不创建类的另一个实例,而是代理调用并创建Bean(到达方法)(如果不存在),或者重新使用Bean(如果是单实例)。谢谢你
BeanFactory
CGLIB
在后台为您做了很多事情。intercept:319, ConfigurationClassEnhancer$BeanMethodInterceptor
无论如何,作为IDE内部的简单性和可用性问题,选项2始终是一条路。
使用选项2,您还可以清楚地看到Bean的依赖关系
解决性能问题,不,没有真正的区别。你不应该真的担心那些小细节。Spring在任何地方都使用代理/拦截器。示例二是否会创建另一个
A
而不是创建B
,其中示例二注入beanA
,因此您只创建一个实例?@Tom看到我的答案了吗。配置类始终是代理的。
a().makeB();
intercept:319, ConfigurationClassEnhancer$BeanMethodInterceptor