Scanning Java annotations at runtime
And another solution is ronmamo's Reflections.
Quick review:
- Spring solution is the way to go if you're using Spring. Otherwise it's a big dependency.
- Using ASM directly is a bit cumbersome.
- Using Java Assist directly is clunky too.
- Annovention is super lightweight and convenient. No maven integration yet.
- Reflections indexes everything and then is super fast.
Use org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider
API
A component provider that scans the classpath from a base package. It then applies exclude and include filters to the resulting classes to find candidates.
ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(<DO_YOU_WANT_TO_USE_DEFALT_FILTER>);
scanner.addIncludeFilter(new AnnotationTypeFilter(<TYPE_YOUR_ANNOTATION_HERE>.class));
for (BeanDefinition bd : scanner.findCandidateComponents(<TYPE_YOUR_BASE_PACKAGE_HERE>))
System.out.println(bd.getBeanClassName());