Class ClassScanner

java.lang.Object
org.miaixz.bus.core.lang.reflect.ClassScanner
All Implemented Interfaces:
Serializable

public class ClassScanner extends Object implements Serializable
类扫描器
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Constructor Summary

    Constructors
    Constructor
    Description
    构造,默认UTF-8编码
    ClassScanner(String packageName)
    构造,默认UTF-8编码
    ClassScanner(String packageName, Predicate<Class<?>> classPredicate)
    构造,默认UTF-8编码
    ClassScanner(String packageName, Predicate<Class<?>> classPredicate, Charset charset)
    构造
  • Method Summary

    Modifier and Type
    Method
    Description
    忽略加载错误扫描后,可以获得之前扫描时加载错误的类名字集合
    protected Class<?>
    loadClass(String className)
    加载类
    扫描包路径下满足class过滤器条件的所有class文件 此方法首先扫描指定包名下的资源目录,如果未扫描到,则扫描整个classpath中所有加载的类
    scan(boolean forceScanJavaClassPaths)
    扫描包路径下满足class过滤器条件的所有class文件
    static Set<Class<?>>
    扫描该包路径下所有class文件,包括其他加载的jar或者类
    static Set<Class<?>>
    scanAllPackage(String packageName, Predicate<Class<?>> classFilter)
    扫描包路径下和所有在classpath中加载的类,满足class过滤器条件的所有class文件, 如果包路径为 com.abs + A.class 但是输入 abs会产生classNotFoundException 因为className 应该为 com.abs.A 现在却成为abs.A,此工具类对该异常进行忽略处理
    static Set<Class<?>>
    scanAllPackageByAnnotation(String packageName, Class<? extends Annotation> annotationClass)
    扫描指定包路径下所有包含指定注解的类,包括其他加载的jar或者类
    static Set<Class<?>>
    scanAllPackageBySuper(String packageName, Class<?> superClass)
    扫描指定包路径下所有指定类或接口的子类或实现类,不包括指定父类本身,包括其他加载的jar或者类
    static Set<Class<?>>
    扫描classpath下所有class文件,如果classpath下已经有类,不再扫描其他加载的jar或者类
    static Set<Class<?>>
    scanPackage(String packageName)
    扫描该包路径下所有class文件
    static Set<Class<?>>
    scanPackage(String packageName, Predicate<Class<?>> classFilter)
    扫描包路径下满足class过滤器条件的所有class文件, 如果包路径为 com.abs + A.class 但是输入 abs会产生classNotFoundException 因为className 应该为 com.abs.A 现在却成为abs.A,此工具类对该异常进行忽略处理
    static Set<Class<?>>
    scanPackageByAnnotation(String packageName, Class<? extends Annotation> annotationClass)
    扫描指定包路径下所有包含指定注解的类 如果classpath下已经有类,不再扫描其他加载的jar或者类
    static Set<Class<?>>
    scanPackageBySuper(String packageName, Class<?> superClass)
    扫描指定包路径下所有指定类或接口的子类或实现类,不包括指定父类本身 如果classpath下已经有类,不再扫描其他加载的jar或者类
    void
    设置自定义的类加载器
    void
    setIgnoreLoadError(boolean ignoreLoadError)
    设置是否忽略所有错误
    void
    setInitialize(boolean initialize)
    设置是否在扫描到类时初始化类

    Methods inherited from class java.lang.Object

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

    • ClassScanner

      public ClassScanner()
      构造,默认UTF-8编码
    • ClassScanner

      public ClassScanner(String packageName)
      构造,默认UTF-8编码
      Parameters:
      packageName - 包名,所有包传入""或者null
    • ClassScanner

      public ClassScanner(String packageName, Predicate<Class<?>> classPredicate)
      构造,默认UTF-8编码
      Parameters:
      packageName - 包名,所有包传入""或者null
      classPredicate - 过滤器,无需传入null
    • ClassScanner

      public ClassScanner(String packageName, Predicate<Class<?>> classPredicate, Charset charset)
      构造
      Parameters:
      packageName - 包名,所有包传入""或者null
      classPredicate - 过滤器,无需传入null
      charset - 编码
  • Method Details

    • scanAllPackageByAnnotation

      public static Set<Class<?>> scanAllPackageByAnnotation(String packageName, Class<? extends Annotation> annotationClass)
      扫描指定包路径下所有包含指定注解的类,包括其他加载的jar或者类
      Parameters:
      packageName - 包路径
      annotationClass - 注解类
      Returns:
      类集合
    • scanPackageByAnnotation

      public static Set<Class<?>> scanPackageByAnnotation(String packageName, Class<? extends Annotation> annotationClass)
      扫描指定包路径下所有包含指定注解的类 如果classpath下已经有类,不再扫描其他加载的jar或者类
      Parameters:
      packageName - 包路径
      annotationClass - 注解类
      Returns:
      类集合
    • scanAllPackageBySuper

      public static Set<Class<?>> scanAllPackageBySuper(String packageName, Class<?> superClass)
      扫描指定包路径下所有指定类或接口的子类或实现类,不包括指定父类本身,包括其他加载的jar或者类
      Parameters:
      packageName - 包路径
      superClass - 父类或接口(不包括)
      Returns:
      类集合
    • scanPackageBySuper

      public static Set<Class<?>> scanPackageBySuper(String packageName, Class<?> superClass)
      扫描指定包路径下所有指定类或接口的子类或实现类,不包括指定父类本身 如果classpath下已经有类,不再扫描其他加载的jar或者类
      Parameters:
      packageName - 包路径
      superClass - 父类或接口(不包括)
      Returns:
      类集合
    • scanAllPackage

      public static Set<Class<?>> scanAllPackage()
      扫描该包路径下所有class文件,包括其他加载的jar或者类
      Returns:
      类集合
    • scanPackage

      public static Set<Class<?>> scanPackage()
      扫描classpath下所有class文件,如果classpath下已经有类,不再扫描其他加载的jar或者类
      Returns:
      类集合
    • scanPackage

      public static Set<Class<?>> scanPackage(String packageName)
      扫描该包路径下所有class文件
      Parameters:
      packageName - 包路径 com | com. | com.abs | com.abs.
      Returns:
      类集合
    • scanAllPackage

      public static Set<Class<?>> scanAllPackage(String packageName, Predicate<Class<?>> classFilter)
      扫描包路径下和所有在classpath中加载的类,满足class过滤器条件的所有class文件, 如果包路径为 com.abs + A.class 但是输入 abs会产生classNotFoundException 因为className 应该为 com.abs.A 现在却成为abs.A,此工具类对该异常进行忽略处理
      Parameters:
      packageName - 包路径 com | com. | com.abs | com.abs.
      classFilter - class过滤器,过滤掉不需要的class
      Returns:
      类集合
    • scanPackage

      public static Set<Class<?>> scanPackage(String packageName, Predicate<Class<?>> classFilter)
      扫描包路径下满足class过滤器条件的所有class文件, 如果包路径为 com.abs + A.class 但是输入 abs会产生classNotFoundException 因为className 应该为 com.abs.A 现在却成为abs.A,此工具类对该异常进行忽略处理
      Parameters:
      packageName - 包路径 com | com. | com.abs | com.abs.
      classFilter - class过滤器,过滤掉不需要的class
      Returns:
      类集合
    • scan

      public Set<Class<?>> scan()
      扫描包路径下满足class过滤器条件的所有class文件 此方法首先扫描指定包名下的资源目录,如果未扫描到,则扫描整个classpath中所有加载的类
      Returns:
      类集合
    • scan

      public Set<Class<?>> scan(boolean forceScanJavaClassPaths)
      扫描包路径下满足class过滤器条件的所有class文件
      Parameters:
      forceScanJavaClassPaths - 是否强制扫描其他位于classpath关联jar中的类
      Returns:
      类集合
    • getClassesOfLoadError

      public Set<String> getClassesOfLoadError()
      忽略加载错误扫描后,可以获得之前扫描时加载错误的类名字集合
      Returns:
      加载错误的类名字集合
    • setIgnoreLoadError

      public void setIgnoreLoadError(boolean ignoreLoadError)
      设置是否忽略所有错误
      Parameters:
      ignoreLoadError - 是否忽略错误
    • setInitialize

      public void setInitialize(boolean initialize)
      设置是否在扫描到类时初始化类
      Parameters:
      initialize - 是否初始化类
    • setClassLoader

      public void setClassLoader(ClassLoader classLoader)
      设置自定义的类加载器
      Parameters:
      classLoader - 类加载器
    • loadClass

      protected Class<?> loadClass(String className)
      加载类
      Parameters:
      className - 类名
      Returns:
      加载的类