zoukankan      html  css  js  c++  java
  • java 获取包下的类 find all classes in a package

    群里有个人问的,java下怎么获取指定包下的类。例如获取java.lang包下都包含什么类。

    classloader

    java的classloader为双亲委派模式。但是只能获取到用户编写的类,并不能获取到诸如java.lang等系统包下的类。在java中,java.lang等包是由bootstrap classloader去负责加载。
    Bootstrap ClassLoader称为启动加载器,是Java类中加载层次最顶层的类加载器,负责加载JDK中的核心类库,如rt.jar,resources.jar,charsets.jar等。bootstrap classloader由c++编写,在java中是无法访问的。既然无法访问,我们就无法通过反射等方法去获取系统核心包下包含的类。

    访问jar包

    通过classloader获取加载的package,然后通过Reflection扫描包中的类即可

    代码如下

            List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
            classLoadersList.add(ClasspathHelper.contextClassLoader());
            classLoadersList.add(ClasspathHelper.staticClassLoader());
    
            Reflections reflections = new Reflections(new ConfigurationBuilder()
                    .setScanners(new SubTypesScanner(false /* don't exclude Object.class */), new ResourcesScanner())
                    .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
                    .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix("org.example"))));
            Set<Class<? extends Object>> allClasses =
                    reflections.getSubTypesOf(Object.class);
            allClasses.stream().forEach(System.out::println);
    

    这种方法可以获取java.lang下包含的类,截图

  • 相关阅读:
    ssm框架配置文件
    接口调用post请求参数在body中
    mysql三种连接方式
    jwt认证登录
    JWT工具类
    token的创建及解析
    IIS目录
    C# 增加多个分部类
    计算机知识
    Kibana 的安装(Windows版本)
  • 原文地址:https://www.cnblogs.com/potatsoSec/p/13151141.html
Copyright © 2011-2022 走看看