反射 -hsp

文章详细介绍了Java中的反射机制,包括如何通过反射创建和使用对象,动态加载类,访问类的属性、方法和构造器。通过反射,可以在不修改源码的情况下,根据外部配置控制程序,符合开放封闭原则(OCP)。同时,文章讨论了反射的优缺点,如动态性与性能影响,并展示了如何优化反射的性能。此外,还涵盖了类加载的过程和类加载器的作用。

反射引入

根据现有的条件,创建一个类对象并使用该对象的方法(类给了文件路径)
以往的方法是new对象

实战需求:在不修改程序本身源码的情况,通过外部文件配置,控制程序,符合设计模式OCP原则(不修改源码扩展功能)

反射快速入门

//从配置文件中读取需要的对象以及方法
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\re.properties"));
        String classFullPath = properties.get("Class").toString();
        String methodName = properties.get("Method").toString();
  
  
        Class aClass = Class.forName(classFullPath);
        //得到一个指定类的Class对象
        Object o = aClass.newInstance();
        //通过这个Class对象得到指定类的实例对象
        Method method = aClass.getMethod(methodName);
        //通过这个指定类的Class对象得到配置文件中指定的方法
        method.invoke(o);
        //调用这个方法,基于传入的o类

Java Reflection

允许程序在执行期借助ReflectionAPI取得任何类的内部信息

  • 当加载完类之后,在堆中就产生一个Class类型的对象(一个类对应一个对象),对象包含了类的完整结构信息,通过这个对象得到类的结构,就像一个蓝图,通过这个Class类对象看到类的结构即反射
    在这里插入图片描述
    个人理解:
    类加载阶段,将 java类 编译后的 Class文件 加载到 方法区,此时是Class类的实例对象 (一种数据结构,存放Cat类的 成员变量,构造器等…)
    运行阶段,实例化一个Cat类,是从方法区中的 存放Cat类的Class对象中,得到一个Cat类的对象,存放在堆区,其对象引用存放在对应线程的栈区

反射各种类和方法

在这里插入图片描述

        Class aClass = Class.forName(classFullPath);
        Object o = aClass.newInstance();
        Method method = aClass.getMethod(methodName);
        method.invoke(o);

        //得到成员对象
       	//getField不能得到私有属性
        Field age = aClass.getField("age");
        System.out.println(age.get(o));

        //得到构造器
        Constructor constructor = aClass.getConstructor();
        System.out.println(constructor);

        //有参构造器需要写参数的class类的字节码文件
        Constructor constructor1 = aClass.getConstructor(String.class);
        System.out.println(constructor1);

反射的优缺点

优点:动态创建和使用对象(框架核心),使用灵活
缺点:使用反射后是解释执行,影响执行速度

想要优化速度,则需要设置setAccessible,方法/成员变量/构造函数 都有这个方法
true表关闭检查,优化就一点点…

类加载器

  • Class类不是用户创建,是由系统创建
    当第一次使用new去一个类时,首先调用类加载器ClassLoader类的构造器
    使用反射实例化一个类,第一次同样会进行类加载
    同一个类对象只有一次!
        Class aClass = Class.forName(classFullPath);
        Class aClass1 = Class.forName(classFullPath);
        System.out.println(aClass1.equals(aClass));
        //同一个Class,只是引用不同,实际上都一样
  • 通过Class 类对象,可以通过各种api方法得到类的完整结构
    在这里插入图片描述

几种方式获取Class对象

        //得到 指定类 的 Class类对象
        //1. 已知全类名,并在该类路径,通过CLass类静态方法
        Class<?> aClass = Class.forName("com.lgj.Cat");
        System.out.println(aClass.getName());

        //2. 类名.class,多用于参数传参
        System.out.println(Cat.class.getName());

        //3.通过已知实例对象反向拿到其Class对象
        Cat cat = new Cat();
        Class<? extends Cat> aClass1 = cat.getClass();
        System.out.println(aClass1.getName());

        //4.通过 四种 类加载器获取(在加载阶段)ClassLoader
        ClassLoader classLoader = cat.getClass().getClassLoader();
        Class<?> aClass2 = classLoader.loadClass("com.lgj.Cat");
        System.out.println(aClass2.getName());

        //基本数据类型直接通过.class得到
        Class<Integer> integerClass = int.class;
        System.out.println(integerClass.getName());

        //基本数据类型的 包装类! 通过.TYPE得到
        Class<Boolean> type = Boolean.TYPE;
        System.out.println(type.getName());

在这里插入图片描述

类的静态/动态加载

类加载被激活的时间
1.当创建对象
2.子类对象被加载
3.调用类中静态成员

4.反射(动态)

举例:在有些让用户选项的的地方,部分的类是不需要被加载的,比如开始游戏时选择游戏类,有些时候用户只会选择一个类,其他类用不上,若是写死了new对象,则编译时就必须要编译通过
动态加载(反射),只有在真正用到的时候才需要加载类
在这里插入图片描述

类加载

类加载分为五个阶段
在这里插入图片描述

下面是对各阶段步骤的讲解

首先一部就是加载阶段,很好理解,将磁盘中的字节码文件 载入 内存中

在这里插入图片描述
连接阶段 验证 会加载一个SecurityManager管理,对引用文件的验证
在这里插入图片描述

连接阶段 - 准备 仅仅只给 静态 遍历赋值,进行第一次初始化 基本数据类型将会变成其最原始初始值(常量则直接赋真实设定值)
实例属性不会分配空间
在这里插入图片描述

连接阶段 - 解析
常量池落地,此时引用全变为直接引用(从符号引用 落地 内存地址)
在这里插入图片描述

Initialization初始化
此时还在类加载,所以实例属性仍然不操作
此时clinit会收集类中的所有静态属性/方法,并运行(按照代码写的顺序)

并且jvm对clinit方法设定了同步机制,正因如此,多线程操作类加载也不会出现问题,也只有一个Class
在这里插入图片描述

通过反射获取类结构信息

第一组:Class类

在这里插入图片描述

第二组 属性

在这里插入图片描述

第三组 Method类

在这里插入图片描述
补充:

  1. 返回修饰符的等级的组合关系是相加
  2. 返回的数据类型,是方法返回值的对应的Class类对象
第四组 构造器

在这里插入图片描述

反射创建对象

在这里插入图片描述

    public static void main(String[] args) throws Exception {
        Class<?> catClass = Class.forName("com.lgj.Cat");

        //1 通过Class类对象的方法,直接使用无参构造器创建实例
        Object cat1 = catClass.newInstance();
        System.out.println(cat1);

        //2. 通过public有参构造器创建实例对象
        Constructor<?> constructor = catClass.getConstructor(int.class);
        Object cat2 = constructor.newInstance(520);
        System.out.println(cat2);

        //3.通过得到 所有的构造器,传参筛选出需要的那一个构造器
        //得到构造器后需要设置setAccessible(true)爆破使用

        Constructor<?> declaredConstructor = catClass.getDeclaredConstructor(String.class, int.class);
        declaredConstructor.setAccessible(true);
        Object cat3 = declaredConstructor.newInstance("暴力破解猫", 9999);
        System.out.println(cat3);
    }

在这里插入图片描述
在这里插入图片描述

    public static void main(String[] args) throws Exception {
        Class<?> catClass = Class.forName("com.lgj.Cat");
        //通过反射获得 实例变量
        Cat cat1 = (Cat) catClass.newInstance();

        //通过反射获得属性
        Field field = catClass.getField("age");
        field.set(cat1,999);

        System.out.println(field.get(cat1));

        //4.反射得到 静态私有属性
        //操作 私有 成员,创建对象时需要使用getDeclared,并且设置setAccessible
        Field field1 = catClass.getDeclaredField("secrete");
        field1.setAccessible(true);
        System.out.println(field1.get(null));//因为是静态属性才使用这个

        //反射拿私有方法并调用
        Method hi = catClass.getDeclaredMethod("Hi", String.class);
        hi.setAccessible(true);
        hi.invoke(cat1,"黄明俊");
    }
  • 在反射中,方法有返回值,统一是Object

反射的两道作业

在这里插入图片描述

        Class<PrivateTest> privateTestClass = PrivateTest.class;
        PrivateTest privateTest = privateTestClass.newInstance();
        Field name = privateTestClass.getDeclaredField("name");
        name.setAccessible(true);
        name.set(privateTest,"黄明俊");

        System.out.println(privateTest.getName());

在这里插入图片描述

        Class<?> fileClass = Class.forName("java.io.File");
        Constructor<?>[] declaredConstructors = fileClass.getDeclaredConstructors();
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println(declaredConstructor);
        }
        Constructor<?> constructor = fileClass.getConstructor(String.class);
        Object o = constructor.newInstance("d:\\test.txt");
        //千万别强转...失去反射的意义了
        Method method = fileClass.getMethod("createNewFile", null);
        method.invoke(o,null);
        System.out.println("文件创建成功");
D:\develop\JDK\jdk1.8.0_271\bin\java.exe -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\soft\IDEA\IntelliJ IDEA 2022.1.2\lib\idea_rt.jar=62316:D:\soft\IDEA\IntelliJ IDEA 2022.1.2\bin" -Dfile.encoding=UTF-8 -classpath D:\develop\JDK\jdk1.8.0_271\jre\lib\charsets.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\deploy.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\access-bridge-64.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\cldrdata.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\dnsns.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\jaccess.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\jfxrt.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\localedata.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\nashorn.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\sunec.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\sunjce_provider.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\sunmscapi.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\sunpkcs11.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\ext\zipfs.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\javaws.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\jce.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\jfr.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\jfxswt.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\jsse.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\management-agent.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\plugin.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\resources.jar;D:\develop\JDK\jdk1.8.0_271\jre\lib\rt.jar;D:\code\SpringCloud-hsp\code\e-commerce-center\e_commerce_eureka-server-9001\target\classes;D:\maven-repository\org\springframework\cloud\spring-cloud-netflix-eureka-server\2.2.1.RELEASE\spring-cloud-netflix-eureka-server-2.2.1.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-freemarker\2.2.2.RELEASE\spring-boot-starter-freemarker-2.2.2.RELEASE.jar;D:\maven-repository\org\freemarker\freemarker\2.3.29\freemarker-2.3.29.jar;D:\maven-repository\org\springframework\spring-context-support\5.2.2.RELEASE\spring-context-support-5.2.2.RELEASE.jar;D:\maven-repository\org\springframework\cloud\spring-cloud-commons\2.2.1.RELEASE\spring-cloud-commons-2.2.1.RELEASE.jar;D:\maven-repository\org\springframework\security\spring-security-crypto\5.2.1.RELEASE\spring-security-crypto-5.2.1.RELEASE.jar;D:\maven-repository\org\springframework\cloud\spring-cloud-netflix-hystrix\2.2.1.RELEASE\spring-cloud-netflix-hystrix-2.2.1.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot-autoconfigure\2.2.2.RELEASE\spring-boot-autoconfigure-2.2.2.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-aop\2.2.2.RELEASE\spring-boot-starter-aop-2.2.2.RELEASE.jar;D:\maven-repository\org\aspectj\aspectjweaver\1.9.5\aspectjweaver-1.9.5.jar;D:\maven-repository\org\springframework\cloud\spring-cloud-netflix-eureka-client\2.2.1.RELEASE\spring-cloud-netflix-eureka-client-2.2.1.RELEASE.jar;D:\maven-repository\com\netflix\eureka\eureka-client\1.9.13\eureka-client-1.9.13.jar;D:\maven-repository\org\codehaus\jettison\jettison\1.3.7\jettison-1.3.7.jar;D:\maven-repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;D:\maven-repository\com\netflix\netflix-commons\netflix-eventbus\0.3.0\netflix-eventbus-0.3.0.jar;D:\maven-repository\com\netflix\netflix-commons\netflix-infix\0.3.0\netflix-infix-0.3.0.jar;D:\maven-repository\commons-jxpath\commons-jxpath\1.3\commons-jxpath-1.3.jar;D:\maven-repository\joda-time\joda-time\2.10.5\joda-time-2.10.5.jar;D:\maven-repository\org\antlr\antlr-runtime\3.4\antlr-runtime-3.4.jar;D:\maven-repository\org\antlr\stringtemplate\3.2.1\stringtemplate-3.2.1.jar;D:\maven-repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;D:\maven-repository\com\google\code\gson\gson\2.8.6\gson-2.8.6.jar;D:\maven-repository\org\apache\commons\commons-math\2.2\commons-math-2.2.jar;D:\maven-repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;D:\maven-repository\com\netflix\servo\servo-core\0.12.21\servo-core-0.12.21.jar;D:\maven-repository\com\sun\jersey\jersey-core\1.19.1\jersey-core-1.19.1.jar;D:\maven-repository\com\sun\jersey\contribs\jersey-apache-client4\1.19.1\jersey-apache-client4-1.19.1.jar;D:\maven-repository\org\apache\httpcomponents\httpclient\4.5.10\httpclient-4.5.10.jar;D:\maven-repository\org\apache\httpcomponents\httpcore\4.4.12\httpcore-4.4.12.jar;D:\maven-repository\commons-codec\commons-codec\1.13\commons-codec-1.13.jar;D:\maven-repository\com\google\inject\guice\4.1.0\guice-4.1.0.jar;D:\maven-repository\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;D:\maven-repository\com\fasterxml\jackson\core\jackson-annotations\2.10.1\jackson-annotations-2.10.1.jar;D:\maven-repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;D:\maven-repository\com\fasterxml\jackson\core\jackson-databind\2.10.1\jackson-databind-2.10.1.jar;D:\maven-repository\com\sun\jersey\jersey-servlet\1.19.1\jersey-servlet-1.19.1.jar;D:\maven-repository\com\sun\jersey\jersey-server\1.19.1\jersey-server-1.19.1.jar;D:\maven-repository\com\sun\jersey\jersey-client\1.19.1\jersey-client-1.19.1.jar;D:\maven-repository\com\netflix\eureka\eureka-core\1.9.13\eureka-core-1.9.13.jar;D:\maven-repository\com\fasterxml\woodstox\woodstox-core\5.2.1\woodstox-core-5.2.1.jar;D:\maven-repository\com\netflix\archaius\archaius-core\0.7.6\archaius-core-0.7.6.jar;D:\maven-repository\com\google\code\findbugs\jsr305\3.0.1\jsr305-3.0.1.jar;D:\maven-repository\commons-configuration\commons-configuration\1.8\commons-configuration-1.8.jar;D:\maven-repository\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;D:\maven-repository\org\slf4j\slf4j-api\1.7.29\slf4j-api-1.7.29.jar;D:\maven-repository\com\google\guava\guava\16.0\guava-16.0.jar;D:\maven-repository\javax\inject\javax.inject\1\javax.inject-1.jar;D:\maven-repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.10.1\jackson-dataformat-xml-2.10.1.jar;D:\maven-repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.10.1\jackson-module-jaxb-annotations-2.10.1.jar;D:\maven-repository\org\codehaus\woodstox\stax2-api\4.2\stax2-api-4.2.jar;D:\maven-repository\com\thoughtworks\xstream\xstream\1.4.11.1\xstream-1.4.11.1.jar;D:\maven-repository\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;D:\maven-repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-web\2.2.2.RELEASE\spring-boot-starter-web-2.2.2.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter\2.2.2.RELEASE\spring-boot-starter-2.2.2.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot\2.2.2.RELEASE\spring-boot-2.2.2.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-logging\2.2.2.RELEASE\spring-boot-starter-logging-2.2.2.RELEASE.jar;D:\maven-repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\maven-repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\maven-repository\org\apache\logging\log4j\log4j-to-slf4j\2.12.1\log4j-to-slf4j-2.12.1.jar;D:\maven-repository\org\apache\logging\log4j\log4j-api\2.12.1\log4j-api-2.12.1.jar;D:\maven-repository\org\slf4j\jul-to-slf4j\1.7.29\jul-to-slf4j-1.7.29.jar;D:\maven-repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\maven-repository\org\yaml\snakeyaml\1.25\snakeyaml-1.25.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-json\2.2.2.RELEASE\spring-boot-starter-json-2.2.2.RELEASE.jar;D:\maven-repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.10.1\jackson-datatype-jdk8-2.10.1.jar;D:\maven-repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.10.1\jackson-datatype-jsr310-2.10.1.jar;D:\maven-repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.10.1\jackson-module-parameter-names-2.10.1.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-tomcat\2.2.2.RELEASE\spring-boot-starter-tomcat-2.2.2.RELEASE.jar;D:\maven-repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.29\tomcat-embed-core-9.0.29.jar;D:\maven-repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.29\tomcat-embed-el-9.0.29.jar;D:\maven-repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.29\tomcat-embed-websocket-9.0.29.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-validation\2.2.2.RELEASE\spring-boot-starter-validation-2.2.2.RELEASE.jar;D:\maven-repository\jakarta\validation\jakarta.validation-api\2.0.1\jakarta.validation-api-2.0.1.jar;D:\maven-repository\org\hibernate\validator\hibernate-validator\6.0.18.Final\hibernate-validator-6.0.18.Final.jar;D:\maven-repository\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;D:\maven-repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;D:\maven-repository\org\springframework\spring-web\5.2.2.RELEASE\spring-web-5.2.2.RELEASE.jar;D:\maven-repository\org\springframework\spring-beans\5.2.2.RELEASE\spring-beans-5.2.2.RELEASE.jar;D:\maven-repository\org\springframework\spring-webmvc\5.2.2.RELEASE\spring-webmvc-5.2.2.RELEASE.jar;D:\maven-repository\org\springframework\spring-aop\5.2.2.RELEASE\spring-aop-5.2.2.RELEASE.jar;D:\maven-repository\org\springframework\spring-context\5.2.2.RELEASE\spring-context-5.2.2.RELEASE.jar;D:\maven-repository\org\springframework\spring-expression\5.2.2.RELEASE\spring-expression-5.2.2.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-actuator\2.2.2.RELEASE\spring-boot-starter-actuator-2.2.2.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.2.2.RELEASE\spring-boot-actuator-autoconfigure-2.2.2.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot-actuator\2.2.2.RELEASE\spring-boot-actuator-2.2.2.RELEASE.jar;D:\maven-repository\io\micrometer\micrometer-core\1.3.1\micrometer-core-1.3.1.jar;D:\maven-repository\org\hdrhistogram\HdrHistogram\2.1.11\HdrHistogram-2.1.11.jar;D:\maven-repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\maven-repository\org\projectlombok\lombok\1.18.20\lombok-1.18.20.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-test\2.2.2.RELEASE\spring-boot-starter-test-2.2.2.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot-test\2.2.2.RELEASE\spring-boot-test-2.2.2.RELEASE.jar;D:\maven-repository\org\springframework\boot\spring-boot-test-autoconfigure\2.2.2.RELEASE\spring-boot-test-autoconfigure-2.2.2.RELEASE.jar;D:\maven-repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;D:\maven-repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;D:\maven-repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;D:\maven-repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;D:\maven-repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;D:\maven-repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;D:\maven-repository\org\junit\jupiter\junit-jupiter\5.5.2\junit-jupiter-5.5.2.jar;D:\maven-repository\org\junit\jupiter\junit-jupiter-api\5.5.2\junit-jupiter-api-5.5.2.jar;D:\maven-repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;D:\maven-repository\org\junit\platform\junit-platform-commons\1.5.2\junit-platform-commons-1.5.2.jar;D:\maven-repository\org\junit\jupiter\junit-jupiter-params\5.5.2\junit-jupiter-params-5.5.2.jar;D:\maven-repository\org\junit\jupiter\junit-jupiter-engine\5.5.2\junit-jupiter-engine-5.5.2.jar;D:\maven-repository\org\junit\vintage\junit-vintage-engine\5.5.2\junit-vintage-engine-5.5.2.jar;D:\maven-repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;D:\maven-repository\org\junit\platform\junit-platform-engine\1.5.2\junit-platform-engine-1.5.2.jar;D:\maven-repository\junit\junit\4.12\junit-4.12.jar;D:\maven-repository\org\mockito\mockito-junit-jupiter\3.1.0\mockito-junit-jupiter-3.1.0.jar;D:\maven-repository\org\assertj\assertj-core\3.13.2\assertj-core-3.13.2.jar;D:\maven-repository\org\hamcrest\hamcrest\2.1\hamcrest-2.1.jar;D:\maven-repository\org\mockito\mockito-core\3.1.0\mockito-core-3.1.0.jar;D:\maven-repository\net\bytebuddy\byte-buddy\1.10.4\byte-buddy-1.10.4.jar;D:\maven-repository\net\bytebuddy\byte-buddy-agent\1.10.4\byte-buddy-agent-1.10.4.jar;D:\maven-repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;D:\maven-repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;D:\maven-repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;D:\maven-repository\org\springframework\spring-core\5.2.2.RELEASE\spring-core-5.2.2.RELEASE.jar;D:\maven-repository\org\springframework\spring-jcl\5.2.2.RELEASE\spring-jcl-5.2.2.RELEASE.jar;D:\maven-repository\org\springframework\spring-test\5.2.2.RELEASE\spring-test-5.2.2.RELEASE.jar;D:\maven-repository\org\xmlunit\xmlunit-core\2.6.3\xmlunit-core-2.6.3.jar;D:\code\SpringCloud-hsp\code\e-commerce-center\e_commerce_center-common-api\target\classes com.example.springCloud.EurekaApplication . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.2.RELEASE) 2025-05-30 20:51:56.378 INFO 19288 --- [ main] c.example.springCloud.EurekaApplication : Starting EurekaApplication on DESKTOP-EP4100D with PID 19288 (D:\code\SpringCloud-hsp\code\e-commerce-center\e_commerce_eureka-server-9001\target\classes started by 86131 in D:\code\SpringCloud-hsp\code\e-commerce-center) 2025-05-30 20:51:56.380 INFO 19288 --- [ main] c.example.springCloud.EurekaApplication : No active profile set, falling back to default profiles: default 2025-05-30 20:51:56.718 WARN 19288 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.example.springCloud.EurekaApplication]; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy 2025-05-30 20:51:56.726 INFO 19288 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-05-30 20:51:56.734 ERROR 19288 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.example.springCloud.EurekaApplication]; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:597) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.access$900(ConfigurationClassParser.java:109) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:805) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at java.util.ArrayList.forEach(ArrayList.java:1259) ~[na:1.8.0_271] at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:801) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:771) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:188) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:325) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:242) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:706) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at com.example.springCloud.EurekaApplication.main(EurekaApplication.java:17) [classes/:na] Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724) ~[na:1.8.0_271] at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531) ~[na:1.8.0_271] at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355) ~[na:1.8.0_271] at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286) ~[na:1.8.0_271] at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120) ~[na:1.8.0_271] at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72) ~[na:1.8.0_271] at java.lang.Class.createAnnotationData(Class.java:3521) ~[na:1.8.0_271] at java.lang.Class.annotationData(Class.java:3510) ~[na:1.8.0_271] at java.lang.Class.getDeclaredAnnotations(Class.java:3477) ~[na:1.8.0_271] at org.springframework.core.annotation.AnnotationsScanner.getDeclaredAnnotations(AnnotationsScanner.java:461) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.annotation.AnnotationTypeMappings.addMetaAnnotationsToQueue(AnnotationTypeMappings.java:85) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.annotation.AnnotationTypeMappings.addAllMappings(AnnotationTypeMappings.java:79) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.annotation.AnnotationTypeMappings.<init>(AnnotationTypeMappings.java:68) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.annotation.AnnotationTypeMappings.<init>(AnnotationTypeMappings.java:46) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.annotation.AnnotationTypeMappings$Cache.createMappings(AnnotationTypeMappings.java:253) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:324) ~[na:1.8.0_271] at org.springframework.core.annotation.AnnotationTypeMappings$Cache.get(AnnotationTypeMappings.java:249) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.annotation.AnnotationTypeMappings.forAnnotationType(AnnotationTypeMappings.java:206) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.annotation.AnnotationTypeMappings.forAnnotationType(AnnotationTypeMappings.java:188) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.annotation.AnnotationTypeMappings.forAnnotationType(AnnotationTypeMappings.java:175) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.annotation.TypeMappedAnnotation.of(TypeMappedAnnotation.java:636) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.annotation.MergedAnnotation.of(MergedAnnotation.java:596) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.type.classreading.MergedAnnotationReadingVisitor.visitEnd(MergedAnnotationReadingVisitor.java:96) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.asm.ClassReader.readElementValues(ClassReader.java:2775) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.asm.ClassReader.accept(ClassReader.java:572) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.asm.ClassReader.accept(ClassReader.java:400) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:50) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.createMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:86) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.getMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:73) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:81) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.asSourceClass(ConfigurationClassParser.java:686) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser$SourceClass.getMemberClasses(ConfigurationClassParser.java:977) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processMemberClasses(ConfigurationClassParser.java:347) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:266) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:587) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] ... 19 common frames omitted Process finished with exit code 1
05-31
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值