配置没有依赖注入的java对象构造

时间:2012-12-10 09:35:33

标签: java

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

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

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

请不要提供依赖注入。

此代码段与dependency injection设计模式无关,因为消费者没有任何指向容器的链接。此外,根本没有容器(这是DI模式的静态组成部分,并且是对OOP原则的残酷违反)而且没有inversion of control

1 个答案:

答案 0 :(得分:0)

您可以创建ObjectFactory,其中提供方法<T> T getInstance(T Interface)

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

在您的示例中,您必须致电

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

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