Estoy en el proceso de desarrollar una aplicación (programador de Quartz) donde tenemos una clase de trabajo que es responsable de realmente ejecutar el trabajo y tenemos que decir/pasar el nombre de la clase de trabajo mientras crea un disparador en el programador de Quartz.Encontrar todas las clases implementando una interfaz específica
Quiero proporcionar un punto de extensión para todos los que quieran usar la API (además de algunos trabajos genéricos que proporcionaré como parte de la API). La idea es crear una interfaz (marcador) y si alguien quiere declarar su clase como clase de trabajo del planificador, todo lo que tiene que hacer es, (declarar) implementar la interfaz.
No estoy seguro de cómo puedo encontrar qué clases están siguiendo el contrato (implementando la interfaz) para poder mostrarlas al usuario que desea programar un desencadenador en el programador.
Mi requisito no es cargar las clases en tiempo de ejecución sino mostrar la lista de usuarios de las clases que implementan la interfaz requerida para que el usuario pueda seleccionar la clase y el nombre de clase que se puede pasar al planificador. Es el programador de Quartz que al final será responsable de crear una instancia de clase.
¿Puede alguien sugerir cómo puedo lograr el objetivo anterior o hay alguna otra manera mejor de lograr lo que estoy tratando de hacer?
Editar
Fui a través del documento de ServiceLoader y parece que para implementar un servicio que uno tiene que crear un archivo en la carpeta META-INF con el nombre de la clase de implementación, lo que me lleva a Creo que si el usuario de mi API quiere 20 implementaciones diferentes, tiene que poner 20 entradas en el archivo que para mí parece mucho trabajo adicional para el usuario final, ya que cada clase de trabajo se creará para ejecutar un trabajo específico y no puede Ser cientos de clases de trabajo.
Corrígeme si mi suposición es incorrecta.
Otro intento es crear una anotación y luego buscar las clases anotadas. Aquí http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime dice cómo lograrlo. – polypiel
¿Ayudaría esto? [link] (http://www.javaworld.com/javaworld/javaqa/2003-07/02-qa-0725-classsrc2.html?page=1) – titogeo