In order to find all annotated classes by using the ClassHunter, we must add the following dependency to our pom.xml:
<dependency> <groupId>org.burningwave</groupId> <artifactId>core</artifactId> <version>12.64.3</version> </dependency>
… And to use Burningwave Core as a Java module, add the following to your module-info.java
:
requires org.burningwave.core;
Now we are able to find all annotated classes:
import java.util.Collection; import org.burningwave.core.assembler.ComponentContainer; import org.burningwave.core.assembler.ComponentSupplier; import org.burningwave.core.classes.ClassCriteria; import org.burningwave.core.classes.ClassHunter; import org.burningwave.core.classes.ConstructorCriteria; import org.burningwave.core.classes.FieldCriteria; import org.burningwave.core.classes.MethodCriteria; import org.burningwave.core.classes.SearchConfig; import org.burningwave.core.io.PathHelper; public class Finder { public Collection<Class<?>> find() { ComponentSupplier componentSupplier = ComponentContainer.getInstance(); PathHelper pathHelper = componentSupplier.getPathHelper(); ClassHunter classHunter = componentSupplier.getClassHunter(); SearchConfig searchConfig = SearchConfig.forPaths( //Here you can add all absolute path you want: //both folders, zip and jar will be recursively scanned. //For example you can add: "C:\\Users\\user\\.m2" //With the line below the search will be executed on runtime Classpaths pathHelper.getMainClassPaths() ).by( ClassCriteria.create().allThoseThatMatch((cls) -> { return cls.getAnnotations() != null && cls.getAnnotations().length > 0; }).or().byMembers( MethodCriteria.withoutConsideringParentClasses().allThoseThatMatch((method) -> { return method.getAnnotations() != null && method.getAnnotations().length > 0; }) ).or().byMembers( FieldCriteria.withoutConsideringParentClasses().allThoseThatMatch((field) -> { return field.getAnnotations() != null && field.getAnnotations().length > 0; }) ).or().byMembers( ConstructorCriteria.withoutConsideringParentClasses().allThoseThatMatch((ctor) -> { return ctor.getAnnotations() != null && ctor.getAnnotations().length > 0; }) ) ); try (ClassHunter.SearchResult searchResult = classHunter.findBy(searchConfig)) { //If you need all annotaded methods unconment this //searchResult.getMembersFlatMap().values(); return searchResult.getClasses(); } } }
BackgroundExecutor
ClassFactory
ClassHunter
- In depth look to and configuration guide
- USE CASE: how to retrieve all classes of the classpath
- USE CASE: how to retrieve all classes that implement one or more interfaces
- USE CASE: finding all classes that extend a base class
- USE CASE: how to find all classes in a package
- USE CASE: Finding all classes for module name (Java 9 and later)
- USE CASE: finding all annotated classes
- USE CASE: how to scan classes for specific annotations and collect their values
- USE CASE: how to search for all classes with a constructor that takes a specific type as first parameter and with at least 2 methods that begin for a given string
- USE CASE: how to search for all classes with methods whose name begins for a given string and that takes a specific type as its first parameter
- USE CASE: finding all classes that have at least 2 protected fields
ClassPathHunter
CodeExecutor
FileSystemItem
FunctionalInterfaceFactory
IterableObjectHelper
JavaMemoryCompiler
PropertyAccessor
UnitSourceGenerator