Class SimpleClassScanner


  • public class SimpleClassScanner
    extends java.lang.Object
    A simple scanner for scanning Class objects under a specified package or archive.

    This class provides various methods to scan and retrieve classes either by package name, resource URL, or archive file. It supports filtering based on classloader, package recursion, and custom predicates.

    Example Usage

    Scan all classes in a package without loading them:

    
     SimpleClassScanner scanner = new SimpleClassScanner();
     Set<Class<?>> classes = scanner.scan(classLoader, "com.example.package");
     

    Scan and load all classes recursively in a package:

    
     Set<Class<?>> loadedClasses = scanner.scan(classLoader, "com.example.package", true, true);
     

    Scan classes from an archive file with filters:

    
     File archiveFile = new File("path/to/archive.jar");
     Predicate<Class<?>> myFilter = cls -> cls.isAnnotationPresent(MyAnnotation.class);
     Set<Class<?>> filteredClasses = scanner.scan(classLoader, archiveFile, false, myFilter);
     
    Since:
    1.0.0
    Author:
    Mercy
    See Also:
    SimpleClassScanner
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.util.Set<java.lang.Class<?>> scan​(java.lang.ClassLoader classLoader, java.io.File archiveFile, boolean requiredLoad, java.util.function.Predicate<? super java.lang.Class<?>>... classFilters)  
      java.util.Set<java.lang.Class<?>> scan​(java.lang.ClassLoader classLoader, java.lang.String packageName)
      It's equal to invoke scan(ClassLoader, String, boolean, boolean) method with requiredLoad=false and recursive=false
      java.util.Set<java.lang.Class<?>> scan​(java.lang.ClassLoader classLoader, java.lang.String packageName, boolean recursive)
      It's equal to invoke scan(ClassLoader, String, boolean, boolean) method with requiredLoad=false
      java.util.Set<java.lang.Class<?>> scan​(java.lang.ClassLoader classLoader, java.lang.String packageName, boolean recursive, boolean requiredLoad)
      scan Class set under specified package name or its' sub-packages in ClassLoader, if requiredLoad indicates true , try to load those classes.
      java.util.Set<java.lang.Class<?>> scan​(java.lang.ClassLoader classLoader, java.net.URL resourceInArchive, boolean requiredLoad, java.util.function.Predicate<? super java.lang.Class<?>>... classFilters)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • SimpleClassScanner

        public SimpleClassScanner()
    • Method Detail

      • scan

        public java.util.Set<java.lang.Class<?>> scan​(java.lang.ClassLoader classLoader,
                                                      java.lang.String packageName)
                                               throws java.lang.IllegalArgumentException,
                                                      java.lang.IllegalStateException
        It's equal to invoke scan(ClassLoader, String, boolean, boolean) method with requiredLoad=false and recursive=false
        Parameters:
        classLoader - ClassLoader
        packageName - the name of package
        Returns:
        scan(ClassLoader, String, boolean, boolean) method with requiredLoad=false
        Throws:
        java.lang.IllegalArgumentException - scanned source is not legal
        java.lang.IllegalStateException - scanned source's state is not valid
      • scan

        public java.util.Set<java.lang.Class<?>> scan​(java.lang.ClassLoader classLoader,
                                                      java.lang.String packageName,
                                                      boolean recursive)
                                               throws java.lang.IllegalArgumentException,
                                                      java.lang.IllegalStateException
        It's equal to invoke scan(ClassLoader, String, boolean, boolean) method with requiredLoad=false
        Parameters:
        classLoader - ClassLoader
        packageName - the name of package
        recursive - included sub-package
        Returns:
        scan(ClassLoader, String, boolean, boolean) method with requiredLoad=false
        Throws:
        java.lang.IllegalArgumentException - scanned source is not legal
        java.lang.IllegalStateException - scanned source's state is not valid
      • scan

        public java.util.Set<java.lang.Class<?>> scan​(java.lang.ClassLoader classLoader,
                                                      java.lang.String packageName,
                                                      boolean recursive,
                                                      boolean requiredLoad)
                                               throws java.lang.IllegalArgumentException,
                                                      java.lang.IllegalStateException
        scan Class set under specified package name or its' sub-packages in ClassLoader, if requiredLoad indicates true , try to load those classes.
        Parameters:
        classLoader - ClassLoader
        packageName - the name of package
        recursive - included sub-package
        requiredLoad - try to load those classes or not
        Returns:
        Throws:
        java.lang.IllegalArgumentException
        java.lang.IllegalStateException
      • scan

        public java.util.Set<java.lang.Class<?>> scan​(java.lang.ClassLoader classLoader,
                                                      java.net.URL resourceInArchive,
                                                      boolean requiredLoad,
                                                      java.util.function.Predicate<? super java.lang.Class<?>>... classFilters)
      • scan

        public java.util.Set<java.lang.Class<?>> scan​(java.lang.ClassLoader classLoader,
                                                      java.io.File archiveFile,
                                                      boolean requiredLoad,
                                                      java.util.function.Predicate<? super java.lang.Class<?>>... classFilters)