Я занимаюсь разработкой приложения (Quartz scheduler), где у нас есть класс работы, который отвечает за фактическое выполнение работы, и нам нужно указать/передать имя класса задания при создании триггера в Quartz планировщик.
Я хочу предоставить точку расширения всем, кто хочет использовать API (помимо некоторых общих заданий, которые я буду предоставлять как часть API). Идея состоит в том, чтобы создать (маркерный) интерфейс, и если кто-то хочет объявить свой класс как класс задания планировщика, все, что им нужно сделать, это (объявить) реализовать интерфейс.
Я не уверен, как я могу найти, какие классы следуют за контрактом (путем реализации интерфейса), чтобы я мог показать их пользователю, который хочет запланировать триггер в планировщике.
Мое требование - не загружать классы во время выполнения, а показывать список пользователей классов, которые реализуют требуемый интерфейс, чтобы пользователь мог выбрать класс, а имя класса можно передать планировщику. Это планировщик Quartz, который в конце будет отвечать за создание экземпляра класса.
Может ли кто-нибудь предложить, как я могу достичь вышеуказанной цели, или есть ли другой лучший способ достичь того, что я пытаюсь сделать?
Edit
Я просмотрел документ ServiceLoader, и кажется, что для реализации службы необходимо создать файл в папке META-INF с именем класс реализации, который заставляет меня думать, что если пользователь моего API хочет 20 различных реализаций, он должен поместить 20 записей в файл, который для меня кажется большим количеством дополнительной работы для конечного пользователя, поскольку каждый класс задания будет создан для выполнения определенного задания, и может быть 100 классов рабочих заданий.
Пожалуйста, исправьте меня, если мое предположение неверно.