[英]maven cyclic dependency resolution
任何人都可以幫助解決我的應用程序中的這種循環依賴性錯誤。
這是我的情況:我有2個需要根據決策者值相互通信的類,但是如果我嘗試在導致循環依賴項錯誤的類中添加依賴項,則這2個類將保留在不同的模塊中。
我正在計划的示例功能將與此類似
class A {
void funA() {
System.out.print("Module A");
}
void Validate() {
boolean decider = true; // if true indicates belongs to Class A else B
if (decider) {
funA();
} else {
B b = new B();
b.funB();
}
}
private class B {
void funB() {
System.out.print("Module B");
}
void Validate() {
boolean decider = false;// if true indicates belongs to Class A else B
if (decider) {
funB();
} else {
A a = new A();
a.funA();
}
}
}
}
ClassA停留在ModuleA內, ClassB停留在ModuleB內,即使創建新模塊並移動通用功能,我如何也可以實現上述功能
如果一個類A
需要實例化類B
和B
需要實例化類A
(意味着調用new A()
等),比這兩個類必須是相同的模塊中。 因此,您的構建是不可能的。
我想雖然可以實現您期望的邏輯,但是對我來說,您還不確定要通過“決策者”和不同的調用實現什么目標。
由於您的代碼不是很實際,因此很難建議您如何重構代碼。
這里有一些建議,希望可以給您啟發以解決您的實際問題
您可以將A
和B
拔出作為通用模塊。 因此, A
和B
之間A
相互引用不是問題,因為它們在同一模塊中。 原始的module_a
和module_b
都將依賴於新的a_b_common
模塊(包含A
和B
)
重構代碼,使A和B不會直接依賴。 有很多方法,這里只是一個示例:
有Action
中的通用模塊
interface Action {
void perform();
}
使A不再依賴B
class A {
Action fallbackAction; // setter etc
void validate() {
if xxxxx {
funcA();
} else {
fallbackAction.perform();
}
}
}
// similar for B
使用依賴注入,通過類似的方式構造A和B
A a = new A();
a.setFallbackAction(new Action(){
void perform() { new B().funcB(); }
} );
B b = new B();
b.setFallbackAction(new Action(){
void perform() { new A().funcA(); }
} );
(當然,您甚至可以在Java8中使用lambda和功能接口來完成上述工作。這只是給您一個高級的想法)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.