2014-02-14 3 views
0

Итак, для моего проекта Java я хочу динамически загружать все мои модули без необходимости ручной помощи.Java автоматически загружает классы из нескольких пакетов внутри основного пакета

Это оказалось трудным для меня на основе моей компоновки пакетов. Я не хочу перемещать 200 ~ нечетных классов из чистой компоновки пакетов в один пакет, чтобы позволить отражению полностью загрузить их.

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

Мой макет пакет следующим образом:

http://puu.sh/6VVih.png

Я хочу проходным [com.package.module.modules] найти все другие пакеты, цикл через них, получить все классы и поверг их моя база, а затем загрузить их.

Мне было трудно с этим, и я недавно принял очень ... беспорядочный подход к нему. (Неориентированный).

Любая помощь будет очень признательна.

+0

Моим инстинктом было бы рассмотреть использование объекта 'java.util.ServiceLoader', хотя это может зависеть от более подробной информации о вашем случае использования. – Caleryn

+0

Разум, объясняющий? Извините за отсутствие деталей здесь. Мне сложно объяснить и понять всю ситуацию. – Lynxaa

ответ

0

Как изначально указано в комментарии, это может зависеть от более подробной информации о вашем случае использования. Можно использовать загрузчик услуг для загрузки зарегистрированных реализаций класса или интерфейса.

например.

 Collection<YourInterface> collection = new ACollectionImplementation<>(); 
     for (final YourInterface object: ServiceLoader.load(YourInterface.class)) { 
       collection.add(object); 
     } 

регистрация должна быть сделана в файле с полным именем класса из YourInterface в META-INF/услуг. перечисляя каждую реализацию в отдельной строке с ее полным именем.

Приведенное выше требование потребует, чтобы каждый класс имел конструктор по умолчанию для загрузчика Service для инициализации. Это часто используется для создания заводских классов, которые могут быть дополнительно расширены для создания дополнительных объектов.

Google «примеры JavaLoader» для многочисленных обработанных примеров.

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