번들 A :OSGi 클래스 로딩 : BND가 직접 참조되지 않는 클래스를 가져 오는 이유는 무엇입니까?
FooA.java
package com.foo.a;
import com.foo.b.FooB;
class FooA {
FooB b = new FooB();
}
일괄 B :
FooB.java :
package com.foo.b;
import com.foo.c.FooC;
class FooB {
public FooC foo() {
...
}
}
번들 C : ...
간단히 말해서, 나는 3 묶음 - A, B 및 C가 있습니다.
번들 A는 번들 B를 직접 참조하고 번들 B는 C를 참조합니다. 알다시피 FooA는 FooC에서 FooC를 반환하는 메서드를 사용하지 않으므로 FooC는 번들 A에서 직접 참조되지 않습니다.
OSGi 가져 오기 패키지를 포함하는 BND가 com.foo.c에 포함 된 이유는 무엇입니까? 내가 이해하는 방식 - 번들 A는 스스로를 해결할 수 있도록 번들 B 만 있으면됩니다. 번들 B는 다른 한편으로는 C가 필요합니다. 그러나 A가 거기에 사용되지 않는다면 A는 왜 C를 직접 요구해야합니까?
오케이, 인터페이스를 소개하는 것으로 이해합니다. 그러나 나는이 특별한 문제에 대한 해결책을 찾고 있지 않다. 제가하려는 것은 문제에 대한 이해를 얻는 것입니다 - 왜 BND에이 패키지가 포함되어 있습니까? 패키지가 정말로 필요합니까? 가져 오기를 수동으로 삭제하면 클래스로드가 중단됩니까? 왜? A는 C를 직접 사용하지 않습니다 ... – mdzh
클래스 A를 인스턴스화하거나 자신의 케이스에서 사용하려면 Java가 C를 필요로하는지에 따라 달라집니다. 가져 오기를 제거하면 어떤 일이 발생하는지 보는 것은 흥미로울 것입니다. 그것은 여전히 작동한다면 어쩌면 향상시킬 수 있지만 일반적으로 꽤 정확합니다 .. 아직도 인터페이스와 서비스를 사용하려고 노력해야합니다 ... 그것은 모듈을 실제로 분리 할 수있는 유일한 방법입니다. –