Sono in procinto di sviluppare un'applicazione (programmatore Quartz) in cui abbiamo una classe di lavoro che è responsabile dell'esecuzione effettiva del lavoro e dobbiamo dire/passare il nome della classe di lavoro mentre si crea un trigger nel programmatore Quartz.Trovare tutte le classi che implementano un'interfaccia specifica
Desidero fornire un punto di estensione a tutti coloro che desiderano utilizzare l'API (oltre ad alcuni lavori generici che fornirò come parte dell'API). L'idea è di creare un'interfaccia (marcatore) e se qualcuno vuole dichiarare la propria classe come classe di lavoro schedulatore, tutto ciò che devono fare è, a (dichiarare) di implementare l'interfaccia.
Non sono sicuro di come sia possibile individuare le classi che seguono il contratto (implementando l'interfaccia) in modo che possa mostrarle all'utente che desidera pianificare un trigger nel programma di pianificazione.
Il mio requisito non è caricare le classi in fase di esecuzione ma mostrare l'elenco di utenti delle classi che implementano l'interfaccia richiesta in modo che l'utente possa selezionare la classe e il nome della classe possa essere passato allo scheduler. È lo scheduler Quartz che alla fine sarà responsabile di creare un'istanza di classe.
Qualcuno può suggerire come posso raggiungere l'obiettivo di cui sopra o c'è qualche altro modo migliore per ottenere ciò che sto cercando di fare?
Modifica
ho attraversato il doc di ServiceLoader e sembra che per l'attuazione di un servizio si deve creare un file nella cartella META-INF con il nome della classe di implementazione, che mi porta a pensate che se l'utente della mia API vuole 20 diverse implementazioni, deve inserire 20 voci nel file che per me sembra un sacco di lavoro extra per l'utente finale poiché ogni classe di lavoro verrà creata per l'esecuzione di un lavoro specifico e non ci può essere centinaia di classi di lavoro.
Per favore correggimi se la mia ipotesi è sbagliata.
Un'altra prova è creare un'annotazione e quindi cercare le classi annotate. Qui http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime dice come ottenerlo. – polypiel
Questo aiuto? [collegamento] (http://www.javaworld.com/javaworld/javaqa/2003-07/02-qa-0725-classsrc2.html?page=1) – titogeo