diff --git a/core-java-modules/core-java-jvm-2/pom.xml b/core-java-modules/core-java-jvm-2/pom.xml index 08c8de75a9..b34aac5a78 100644 --- a/core-java-modules/core-java-jvm-2/pom.xml +++ b/core-java-modules/core-java-jvm-2/pom.xml @@ -26,11 +26,23 @@ jol-core ${jol-core.version} + + org.reflections + reflections + ${reflections.version} + + + com.google.guava + guava + ${guava.version} + 3.6.1 0.10 + 0.10.2 + 31.0.1-jre - \ No newline at end of file + diff --git a/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/loadedclasslisting/ListLoadedClass.java b/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/loadedclasslisting/ListLoadedClass.java new file mode 100644 index 0000000000..b4a290e70d --- /dev/null +++ b/core-java-modules/core-java-jvm-2/src/main/java/com/baeldung/loadedclasslisting/ListLoadedClass.java @@ -0,0 +1,35 @@ +package com.baeldung.loadedclasslisting; + +import java.io.IOException; +import java.util.Set; +import java.util.stream.Collectors; + +import org.reflections.Reflections; +import org.reflections.scanners.SubTypesScanner; + +import com.google.common.collect.ImmutableSet; +import com.google.common.reflect.ClassPath; +import com.google.common.reflect.ClassPath.ClassInfo; + +public class ListLoadedClass { + + public ImmutableSet listClassLoaded() throws IOException { + return ClassPath.from(ListLoadedClass.class.getClassLoader()) + .getAllClasses(); + } + + public Set listClassLoaded(String packageName) throws IOException { + return ClassPath.from(ClassLoader.getSystemClassLoader()).getAllClasses().stream() + .filter(clazz -> clazz.getPackageName().equals(packageName)) + .map(ClassInfo::load) + .collect(Collectors.toSet()); + } + + public Set findAllClassesUsingReflectionsLibrary(String packageName) { + Reflections reflections = new Reflections(packageName, new SubTypesScanner(false)); + return reflections.getSubTypesOf(Object.class) + .stream() + .collect(Collectors.toSet()); + } + +} diff --git a/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/loadedclasslisting/ListLoadedClassUnitTest.java b/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/loadedclasslisting/ListLoadedClassUnitTest.java new file mode 100644 index 0000000000..c3e29b27b6 --- /dev/null +++ b/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/loadedclasslisting/ListLoadedClassUnitTest.java @@ -0,0 +1,41 @@ +package com.baeldung.loadedclasslisting; + +import java.io.IOException; +import java.util.Set; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; + +import com.baeldung.loadedclasslisting.ListLoadedClass; +import com.google.common.collect.ImmutableSet; +import com.google.common.reflect.ClassPath; +import com.google.common.reflect.ClassPath.ClassInfo; + +public class ListLoadedClassUnitTest { + + private static final String PACKAGE_NAME = "com.baeldung.loadedclasslisting"; + + @Test + public void when_findAllClassesUsingReflectionsLibrary_thenSuccess() { + ListLoadedClass instance = new ListLoadedClass(); + Set classes = instance.findAllClassesUsingReflectionsLibrary(PACKAGE_NAME); + + Assertions.assertEquals(4, classes.size()); + } + + @Test + public void when_findAllClassesUsingGuavaLibrary_InPackage_thenSuccess() throws IOException { + ListLoadedClass instance = new ListLoadedClass(); + Set classes = instance.listClassLoaded(PACKAGE_NAME); + + Assertions.assertEquals(4, classes.size()); + } + + @Test + public void when_findAllClassesUsingGuavaLibrary_thenSuccess() throws IOException { + ListLoadedClass instance = new ListLoadedClass(); + Set classes = instance.listClassLoaded(); + + Assertions.assertTrue(4