0

这是我的代码(当然只是一个例子):

Employee manager = new DefaultEmployee(/* dependencies */);
Budget budget = new DefaultBudget(/* dependencies */);
Project project = new DefaultProject(manager, budget);

DefaultProject依赖EmployeeBudget,它们依赖于其他东西,等等等等。依赖的层次结构相当大(可能是数百种类型)。我可以硬编码(如示例中所示),或者我可能可以使用某种配置(XML 或 YAML)和一些可以在运行时创建这种层次结构的构建器。除了 Spring Framework,还有什么可用的解决方案吗?

请不要提供依赖注入。

这个片段与依赖注入设计模式无关,因为消费者没有任何指向容器的链接。而且,根本没有容器(这是DI模式的静态组件,是对OOP原则的粗暴违反),也没有控制反转

4

1 回答 1

0

您可以创建一个ObjectFactory提供方法的方法<T> T getInstance(T Interface)

然后工厂查找您传递的接口的实现,实例化并返回它。考虑它实例化的对象的ObjectFactory构造函数以查找进一步的实现。这几乎是一种反射,但很有效,我已经在一个项目中使用过它。

在您的示例中,您将不得不致电

Project project = objectFactory.getInstance(Project.class);

ObjectFactory找到实现 ( )DefaultProject并看到构造函数需要 anEmployee和 a Budget。因此,在实例化之前,DefaultProject它会查找那些 (DefaultEmployeeDefaultBudget) 的实现并实例化它们。你必须在这里使用递归。

于 2012-12-10T09:50:54.943 回答