Как получить загрузчик классов для пакета в равноденствие?
Я прочитал много кода равноденствия для этого, но по-прежнему не могу понять, что не-хакерский способ получить загрузчик классов для пакета 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, просто используйте объект или тип, который исходит от интересующего вас пакета.