Как получить загрузчик классов для связки в равноденствие? - PullRequest
14 голосов
/ 01 октября 2009

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

Ответы [ 4 ]

34 голосов
/ 07 марта 2013

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

bundle.adapt(BundleWiring.class).getClassLoader()
11 голосов
/ 01 октября 2009

Короткий ответ (конечно, для OSGi 4.1, не уверенный в 4.2) - вы не можете получить загрузчик классов в комплекте. Однако интерфейс Bundle предоставляет метод <a href="http://www.osgi.org/javadoc/r4v41/org/osgi/framework/Bundle.html#loadClass(java.lang.String)" rel="noreferrer">loadClass()</a>, и это позволит вам написать загрузчик классов, который упаковывает API пакета и делегирует этот метод loadClass(). Или вы можете сэкономить время и использовать класс Spring DM <a href="http://static.springsource.org/osgi/docs/1.2.0/api/org/springframework/osgi/util/BundleDelegatingClassLoader.html" rel="noreferrer">BundleDelegatingClassLoader</a>.

5 голосов
/ 15 октября 2013

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

Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
1 голос
/ 02 октября 2009

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

object.getClass().getClassLoader();

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

SomeType.class.getClassLoader();

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

...