2013-08-31 3 views
0

В настоящее время я использую эту строку, чтобы загрузить 3 участника JAR и добавить свои пакеты/классы в моей программеJava URLClassLoader: выбрать, какие классы импортировать

URL [] urls = new URL [] { "http://..." }; 
new URLClassLoader(urls); 

У меня проблема такого подхода заключается в том, что загружается весь JAR, что означает, что все пакеты и все классы импортируются. Как я могу указать URLClassLoaded для загрузки только нескольких выбранных классов?

Примером может служить баночке иерархия как этот

  • пакет
    • класс 1
    • класс 2
  • пакет B
    • класс 1
    • класс 2
    • класс 3
    • класс 4

Я хотел бы сделать что-то вроде "импорта только А. * и B.class2"

+1

Реализовать свой собственный 'ClassLoader'. –

+0

Вам придется реализовать пользовательский загрузчик классов, как я описал в своем ответе, и установить его как загрузчик классов по умолчанию для загрузки классов –

ответ

1

Обеспечение пользовательской реализации ClassLoader ,

Переопределите метод загрузчика классов и примените бизнес-логику для выбора классов, которые вы хотите загрузить.

class CustomClassLoader extends ClassLoader { 

     public Class findClass(String name) { 
      if(shouldBeLoaded) 
       return defineClass(name, b, 0, b.length); 
     } 
    } 

Установка этого класса, как по умолчанию загрузчик для загрузки (факультативно)

java -Djava.system.class.loader 
    =com.test.CustomClassLoader 
+0

Нужно ли мне устанавливать его по умолчанию? Разве это не должно быть так, если я всегда вызываю новый CustomClassLoader() вместо нового URLClassLoader()? – Flavio

+0

Нет, вы тоже можете сделать CustomClassLoader(). Вам не нужно делать это по умолчанию. –

Смежные вопросы