Сканировать путь класса для классов с пользовательской аннотацией
Например, если у меня есть аннотация @MyOwnAnnotation
и у меня есть эти классы в моем пути к классам, так что я мог бы сканировать путь к классу, возможно, с каким-то фильтром (например, сканировать только пакеты, начиная с my.own.app.*
), и получить список всех классов с аннотацией @MyOwnAnnotation
? Я использую guice в качестве рамки для инъекций, и я не использую Spring.
Ответы
Ответ 1
Да, просмотрите библиотеку Scannotation.
Кроме того, см. следующее сообщение в блоге, в котором используется использование Scannotation.
Основной пример:
URL[] urls = ClasspathUrlFinder.findClassPaths(); // scan java.class.path
AnnotationDB db = new AnnotationDB();
db.scanArchives(urls);
Set<String> entityClasses =
db.getAnnotationIndex().get(MyOwnAnnotation.class.getName());
Ваши аннотации должны иметь удержание "runtime", чтобы они были доступны в файле .class
во время выполнения.
Ответ 2
Вы можете попробовать мою библиотеку FastClasspathScanner:
List<String> classNames = new FastClassPathScanner("my.own.app")
.scan()
.getNamesOfClassesWithAnnotation(MyOwnAnnotation.class);
Ответ 3
Я бы рекомендовал другой подход, лучше, чем все остальные (поскольку все они используют сканирование классов, медленное). Он называется ClassIndex, а INDEXES - аннотированные классы:
https://github.com/atteo/classindex
Ответ 4
Вы можете попробовать кукурузу-cps
Пример:
List<Class<?>> classes = CPScanner.scanClasses(new PackageNameFilter("net.sf.corn.cps.*"),new ClassFilter().appendAnnotation(SampleAnnotation.class));
установите значение dependecy ниже в pom.xml
<dependency>
<groupId>net.sf.corn</groupId>
<artifactId>corn-cps</artifactId>
<version>1.0.1</version>
</dependency>