For methods handling we are going to use Methods component; Methods component uses to cache all methods and all method handles for faster access. In order to accomplish the task, we initially need to 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;
Let’s take a look at the code now:
import static org.burningwave.core.assembler.StaticComponentContainer.Fields; import java.lang.reflect.Field; import java.util.Collection; import java.util.List; import java.util.Map; import org.burningwave.core.classes.FieldCriteria; @SuppressWarnings("unused") public class FieldsHandler { public static void execute() { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); //Fast access by memory address Collection<Class<?>> loadedClasses = Fields.getDirect(classLoader, "classes"); //Access by Reflection loadedClasses = Fields.get(classLoader, "classes"); //Get all field values of an object through memory address access Map<Field, ?> values = Fields.getAllDirect(classLoader); //Get all field values of an object through reflection access values = Fields.getAll(classLoader); Object obj = new Object() { volatile List<Object> objectValue; volatile int intValue; volatile long longValue; volatile float floatValue; volatile double doubleValue; volatile boolean booleanValue; volatile byte byteValue; volatile char charValue; }; //Get all filtered field values of an object through memory address access Fields.getAllDirect( FieldCriteria.forEntireClassHierarchy().allThat(field -> { return field.getType().isPrimitive(); }), obj ).values(); } public static void main(String[] args) { execute(); } }
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