¿Cuál es la mejor manera de buscar en todo el classpath una clase anotada?
Estoy haciendo una biblioteca y quiero permitir que los usuarios anoten sus clases, por lo que cuando se inicia la aplicación web, necesito escanear toda la ruta de clase para obtener cierta anotación.
¿Conoces una biblioteca o una instalación de Java para hacer esto?
Editar: Estoy pensando en algo como la nueva funcionalidad para Java EE 5 Web Services o EJB's. Anota tu clase con @WebService
o @EJB
y el sistema encuentra estas clases mientras se carga para que sean accesibles de forma remota.
fuente
@Conditional
anotaciones. Entonces, si una clase tiene un@Conditional
valor que devuelve falso, no será devueltofindCandidateComponents
, incluso si coincide con el filtro del escáner. Esto me sorprendió hoy: terminé usando la solución de Jonathan a continuación.BeanDefinition
objeto no proporciona una forma de obtener la clase directamente. Lo más parecido parece sergetBeanClassName
que devuelve un nombre de clase totalmente calificado, pero el comportamiento exacto de este método no está claro. Además, no está claro en qué cargador de clases se encontró la clase.Class<?> cl = Class.forName(beanDef.getBeanClassName());
farenda.com/spring/find-annotated-classes