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