SpringBoot启动异常:java.lang.IllegalStateException: Failed to introspect Class [xxx]

异常含义

  • Failed to introspect Class [xxx]
  • 内省 类xxx 失败

A类中导入了B类,但是在运行A类调用到B类地方的时候B类却找不到,这种问题本身在运行到A类中用到B类的地方是会报错的,但是这个问题比较特殊,如果A类提前被内省的时候,如果B类作为能够通过内省获取,则获取到 B类信息就会因为该类未被加载而报此错误,且提示不具体

情景

项目功能拆分过程中删除了一些类,Idea等工具暂时还没有索引到依赖的类已经不存在了或者说引入了包但是从未使用过,此时Debug项目,控制台打印内容如下:

Exception encountered during context initialization
 - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: 
 - Error creating bean with name TbCfgApi
Lookup method resolution failed; nested exception is 
java.lang.IllegalStateException: Failed to introspect Class [TbCfgCategoryAppImpl]
from ClassLoader [sun.misc.Launcher$AppClassLoader@17acb47c]

原因分析

出现这种异常的原因主要就是TbCfgCategoryAppImpl(报异常的类)中使用了当前工程没有导入的类或者是之前导入的类在整理过程中被删除,但是这个类当中仍然保留着对不存在的类的依赖,从而导致类加载失败。一般来说如果使用了没有依赖的类或者方法会报ClassNotFindException、找不到符号等错误,但是如果只是导入却没有使用的使用可能就会报此错误。

tips:像这种错误,按理来说如果打开对应的文件IDE应该会给出对应的提示,但是在一些刚整理完文件结构以及内容的时候可能会出现这种问题,像我出现问题的类,当我打开对应文件就已经出现了提示。

解决方案

  1. 检查报异常的类当中是否包含不存在的依赖(类或者包),将之导入(或者加入maven依赖),确保其对应的ClassLoader类加载器能够在当期classPath找到此类即可;如果用不到就将这条依赖删除
  2. 有时候在清理过程中光是删除使用到了不存在的类的方法不够,注意方法当中使用到了不存在的类和类的方法

特此记录,在清理不需要的类的时候,一定要注意在其他类中的装配和关联,不然容易报一些不常见的Bug

你可能感兴趣的:(Java学习,Bug解决,java,spring,spring,boot)