Динамическая регистрация объектов в Java - PullRequest
0 голосов
/ 01 декабря 2011

Я хотел бы добавить динамическое поведение к приложению, желательно не прибегая к рефлексии, поэтому я смотрю на регистрацию объекта.

Подход, о котором я думаю, прост: в классе (скажем, Base), который загружается достаточно рано, будет поддерживаться реестр (например, HashMap) объектов плагинов, каждый из которых будет позже используется для вызова некоторых из их методов.

Вопрос в том, как зарегистрировать эти плагины в Base без предварительного знания их существования (чтобы приложение могло динамически расширяться с помощью большего количества таких плагинов). Незнание их заранее означает, что ClassLoader или любая ссылка на их классы не могут быть использованы, поэтому даже при статической инициализации регистрационный код не может быть добавлен (так как классы плагинов не будут загружены достаточно рано, поэтому класс Base запустится выполнение, не зная их).

Есть ли простое решение вышеописанного сценария?

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

Существует несколько способов реализации механизмов плагинов, в конечном итоге вам нужно либо искать реализации интерфейса, либо аннотации. Для вас важно, чтобы вы реализовали это сами? Уже есть библиотеки, которые делают это (например, jspf ).

Если вас не интересует рефлексия, тогда код должен соответствовать известному интерфейсу. В противном случае вам нужно будет использовать отражение где-то для сопоставления между тем, что предоставляют класс (ы) плагина, и тем, что «базовый» код знает, как вызывать.

0 голосов
/ 01 декабря 2011

не могли бы вы использовать что-то вроде пружинного и зависимого внедрения?если вы можете, каждый плагин может быть инициализирующим компонентом, поэтому он загружается при запуске и при вызове метода init возвращается к базе, чтобы зарегистрировать себя, если не через непосредственное внедрение зависимостей.который, очевидно, использует отражение в фоновом режиме, поэтому не уверен, исключает ли это это в качестве предпочтительного решения ...

в другой заметке, обычно поиск классов не является надежной проверкой, особенно если у вас может быть несколько загрузчиков классов :-(

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