编译时和运行时之间的依赖注入

时间:2012-11-17 11:59:01

标签: java design-patterns dependency-injection refactoring

一般来说,是否应该努力将类的依赖项与其导入对齐?

例如,通常应该避免做这样的事情:

Bar.java:

import com.somepackage.Foo;
import com.somepackage.Baz;

public Bar(Foo foo) {...}

public void doSomething(Baz baz) {...}

Baz.java:

import com.somepackage.Bar;

public Baz(Bar bar) {...}

//etc...

基本上,Bar.java导入/使用/使用将其作为依赖项的东西,这似乎很奇怪。 虽然,我不确定使用 dependents 的类是否必然构成某种气味(即,编译时依赖项不符合运行时依赖性,暗示可能应该进行一些重构...)

2 个答案:

答案 0 :(得分:0)

我认为这是一种设计气味。你能提取一个解决循环依赖的第三个类吗?依赖的一个方向是否应该与接口解耦?

如果没有关于类如何相互依赖的细节,将很难更具体。

答案 1 :(得分:-1)

这是循环依赖的一个例子,Java允许它。

请参阅Circular dependency in java classes

设计明智我觉得在包中有这种依赖是可以的。