For fields handling we are going to use Fields component; Fields component uses to cache all fields for faster access. To start we 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 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 = 1; volatile long longValue = 2l; volatile float floatValue = 3f; volatile double doubleValue = 4.1d; volatile boolean booleanValue = true; volatile byte byteValue = (byte)5; volatile char charValue = 'c'; }; //Get all filtered field values of an object through memory address access Fields.getAllDirect( FieldCriteria.forEntireClassHierarchy().allThoseThatMatch(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