2011-09-06 11 views
14

Por ejemplo, si tengo la anotación @MyOwnAnnotation y tengo estas clases en mi classpath, de modo que podría escanear classpath posiblemente con algún tipo de filtro (por ejemplo, escanear solo paquetes comenzando con my.own.app.*) y obtener lista de todas las clases con la anotación @MyOwnAnnotation? Estoy usando Guice como framework de inyección y no uso Spring.Escanee classpath para las clases con anotación personalizada

Respuesta

12

Sí, consulte la biblioteca Scannotation.

Además, consulte la siguiente publicación de blog que documents use of Scannotation.

Ejemplo básico:

URL[] urls = ClasspathUrlFinder.findClassPaths(); // scan java.class.path 
AnnotationDB db = new AnnotationDB(); 
db.scanArchives(urls); 
Set<String> entityClasses = 
    db.getAnnotationIndex().get(MyOwnAnnotation.class.getName()); 

Sus anotaciones tendrán que tener la retención 'en tiempo de ejecución' de modo que estén disponibles en el archivo .class en tiempo de ejecución.

+0

Es posible encontrar otras alternativas mejores - aquí: http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime o si No cuelgue en el escaneo classpath, vea mi respuesta a continuación para una solución alternativa y más rápida. –

0

Usted puede tratar de maíz-cps

Ejemplo:

List<Class<?>> classes = CPScanner.scanClasses(new PackageNameFilter("net.sf.corn.cps.*"),new ClassFilter().appendAnnotation(SampleAnnotation.class)); 

poner el dependecy a continuación en su pom.xml

<dependency> 
    <groupId>net.sf.corn</groupId> 
    <artifactId>corn-cps</artifactId> 
    <version>1.0.1</version> 
</dependency> 
1

Usted podría intentar mi biblioteca FastClasspathScanner:

List<String> classNames = new FastClassPathScanner("my.own.app") 
    .scan() 
    .getNamesOfClassesWithAnnotation(MyOwnAnnotation.class); 
0

De hecho, recomendaría otro enfoque, mejor que todos los demás (dado que todos usan el escaneo classpath, que es lento). Se llama ClassIndex y Que los índices de clases anotadas:

https://github.com/atteo/classindex

Cuestiones relacionadas