Как получить загрузчик классов для пакета в равноденствие?

Я прочитал много кода равноденствия для этого, но по-прежнему не могу понять, что не-хакерский способ получить загрузчик классов для пакета osgi в eclipse equinox setup. Есть один?

Ответы

Ответ 1

Короткий ответ (конечно, для OSGi 4.1, не уверен в 4.2), вы не можете получить загрузчик классов. Однако интерфейс Bundle предоставляет метод loadClass(), и это позволит вам написать загрузчик классов, который обертывает API-интерфейс пакета и делегирует этот метод loadClass(). Или вы можете сэкономить некоторое время и вместо этого использовать класс Spring DM BundleDelegatingClassLoader.

Ответ 2

В OSGi 4.3 вы можете использовать:

bundle.adapt(BundleWiring.class).getClassLoader()

Ответ 3

Загрузочный загрузчик классов можно получить через интерфейс BundleWiring. Вот краткий пример:

Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();

Ответ 4

В нормальном java-коде вы можете получить загрузчик классов, который загрузил данный объект с помощью

object.getClass().getClassLoader();

Или даже просто

SomeType.class.getClassLoader();

То же самое относится к Equinox, просто используйте объект или тип, который исходит от интересующего вас пакета.