Java 依赖注入与Fluent设计

Java 依赖注入与Fluent设计,java,spring,design-patterns,builder,Java,Spring,Design Patterns,Builder,假设您有一个如下所示的spring组件,其中注入了依赖项构造函数(生成器是一个单例): 然而,房子需要一个叫做“基础”的东西,在建造房子之前,它应该通过建筑者或集合传递,而基础不是春天的豆子。我也希望使用builder模式,这样我就可以像下面这样做,但我不确定如何使用spring来做到这一点。除了我想使用spring之外,下面是我想要的东西: Foundation foundation = new Foundation(); HouseBuilder hb = new HouseBuilder

假设您有一个如下所示的spring组件,其中注入了依赖项构造函数(生成器是一个单例):

然而,房子需要一个叫做“基础”的东西,在建造房子之前,它应该通过建筑者或集合传递,而基础不是春天的豆子。我也希望使用builder模式,这样我就可以像下面这样做,但我不确定如何使用spring来做到这一点。除了我想使用spring之外,下面是我想要的东西:

Foundation foundation = new Foundation();

HouseBuilder hb = new HouseBuilder(foundation)
.windowMaker(args)
.doorMaker(args)
.roofMaker(args);

非常感谢您的建议。

Spring依赖项注入和fluent构建器并不是真正为协同工作而设计的。

第一种方法是通过注释或配置以“自动”方式设置对象的依赖项。
第二种是类的客户端指定如何构建对象的方法。

自动依赖项注入和声明性构造实际上是创建对象的两种截然不同的方法。


附带说明的是,带构造函数的Spring依赖项注入带来了两个主要的fluent builder好处:由于注入是由容器执行的,因此不再需要调用更麻烦的构造函数,而且对象可能是不可变的,因为不需要设置器。

@CoffeelsProgramming:builder和Factory模式解决了两个不同的设计问题。你将两者混合的原因是什么?你能为当前的问题向建筑商或工厂提出一个解决方案吗?首先更详细地解释你的用例。标准的反应通常是“让基础变成一个bean”。假设你有下面的12个是用户传递的比萨饼。i、 不适合吃豆子。Pizza Pizza=new Pizza.Builder(12)、cheese(真)、辣香肠(真)、培根(真)、build();
Foundation foundation = new Foundation();

HouseBuilder hb = new HouseBuilder(foundation)
.windowMaker(args)
.doorMaker(args)
.roofMaker(args);