gpt4 book ai didi

java - OSGi 类加载 : why does BND imports classes that are not referenced directly?

转载 作者:行者123 更新时间:2023-11-30 06:52:08 26 4
gpt4 key购买 nike

Bundle-A:

FooA.java

package com.foo.a;

import com.foo.b.FooB;

class FooA {
FooB b = new FooB();
}

Bundle-B:

FooB.java:

package com.foo.b;

import com.foo.c.FooC;

class FooB {

public FooC foo() {
...
}
}

Bundle-C:...

简而言之,我有 3 个 bundle - A、B 和 C。

Bundle A 直接引用 Bundle B,Bundle B 引用 C。如您所见,FooA 没有使用 FooB 中返回 FooC 的方法,因此 Bundle A 中没有直接引用 FooC。

为什么 BND 将 OSGi 导入包包含到 com.foo.c 中?我理解它的方式 - bundle A 只需要 bundle B 才能自行解决。另一方面,Bundle B 需要 C。但是如果 A 没有在那里使用它,为什么要直接需要 C?

最佳答案

我认为 bnd 为你使用的类导入了所有对外部可见的类。当您使用类 FooB 时,您可能需要访问它可能需要作为参数或作为结果返回的所有类。

如果您想避免依赖性,您可以创建一个只显示您真正需要的方法的界面。然后,您可以在 bundle B 中使用该接口(interface)创建一个服务,并且仅使用 bundle A 中的接口(interface)访问该服务。

关于java - OSGi 类加载 : why does BND imports classes that are not referenced directly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39486149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com