这是我的代码(当然只是一个例子):
Employee manager = new DefaultEmployee(/* dependencies */);
Budget budget = new DefaultBudget(/* dependencies */);
Project project = new DefaultProject(manager, budget);
DefaultProject
取决于Employee
和Budget
,它们取决于其他内容等等。依赖关系的层次结构相当大(可能是数百种类型)。我可以硬编码(如在示例中)或者我可以使用某种配置(XML或YAML)和一些可以在运行时创建这种层次结构的构建器。除了Spring Framework之外,还有其他可用的解决方案吗?
请不要提供依赖注入。
此代码段与dependency injection设计模式无关,因为消费者没有任何指向容器的链接。此外,根本没有容器(这是DI模式的静态组成部分,并且是对OOP原则的残酷违反)而且没有inversion of control。
答案 0 :(得分:0)
您可以创建ObjectFactory
,其中提供方法<T> T getInstance(T Interface)
。
然后工厂查找您传递的接口的实现,实例化并返回它。 ObjectFactory
考虑它实例化的对象的构造函数来查找进一步的实现。这几乎是反思但有效,我已经在项目中使用了它。
在您的示例中,您必须致电
Project project = objectFactory.getInstance(Project.class);
ObjectFactory
找到实现(DefaultProject
)并看到构造函数需要Employee
和Budget
。因此,在实例化DefaultProject
之前,它会查找那些(DefaultEmployee
和DefaultBudget
)的实现并实例化它们。你必须在这里使用递归。