当我将@Bean 添加到主类时出现 IllegalStateException
Posted
技术标签:
【中文标题】当我将@Bean 添加到主类时出现 IllegalStateException【英文标题】:IlllegalStateException when I add @Bean to main class 【发布时间】:2021-12-27 07:43:39 【问题描述】:当我将它添加到我的应用程序类时
@Bean
HiddenHttpMethodFilter hiddenHttpMethodFilter()
return new HiddenHttpMethodFilter();
我的应用程序无法启动并出现此错误:
2021-11-16 08:11:08.950 ERROR 70458 --- [main] os.boot.SpringApplication:应用程序运行失败
org.springframework.beans.factory.BeanDefinitionStoreException: 无法解析配置类 [com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication];嵌套异常是 java.lang.IllegalStateException: Failed to introspect annotated methods on class com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication 在 org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:189) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:64) ~[spring-boot-2.5.6.jar:2.5.6] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.6.jar:2.5.6] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.6.jar:2.5.6] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.6.jar:2.5.6] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.6.jar:2.5.6] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.6.jar:2.5.6] 在 com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication.main(LearningSpringBootApplication.java:12) ~[main/:na] 原因:java.lang.IllegalStateException:无法自省 com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication 类上的注释方法 在 org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:162) ~[spring-core-5.3.12.jar:5.3.12] 原因:java.lang.IllegalStateException:无法自省 com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication 类上的注释方法
在 org.springframework.context.annotation.ConfigurationClassParser.retrieveBeanMethodMetadata(ConfigurationClassParser.java:403) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:326) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175) ~[spring-context-5.3.12.jar:5.3.12] ...省略了13个常用框架 原因:java.lang.IllegalStateException:无法从 ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@22d8cfe0] 内省类 [com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication] 原因:java.lang.IllegalStateException:无法从 ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@22d8cfe0] 内省类 [com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication]
在 org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481) ~[spring-core-5.3.12.jar:5.3.12] 在 org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:455) ~[spring-core-5.3.12.jar:5.3.12] 在 org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:151) ~[spring-core-5.3.12.jar:5.3.12] ...省略了18个常用框架 引起:java.lang.NoClassDefFoundError: javax/servlet/Filter 在 java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na] 引起:java.lang.NoClassDefFoundError: javax/servlet/Filter
在 java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010) ~[na:na] 在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:855) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:753) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:676) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634) ~[na:na] 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na] 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na] 在 java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na] 在 java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010) ~[na:na] 在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:855) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:753) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:676) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634) ~[na:na] 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na] 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na] 在 java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na] 在 java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010) ~[na:na] 在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:855) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:753) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:676) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634) ~[na:na] 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na] 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na] 在 java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na] 在 java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3334) ~[na:na] 在 java.base/java.lang.Class.getDeclaredMethods(Class.java:2446) ~[na:na] 在 org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ~[spring-core-5.3.12.jar:5.3.12] ...省略了20个常用框架 引起:java.lang.ClassNotFoundException:javax.servlet.Filter 引起:java.lang.ClassNotFoundException: javax.servlet.Filter
在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) ~[na:na] 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na] 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na] ...省略了51个常用框架
任务“:LearningSpringBootApplication.main()”执行失败。 进程 'command '/usr/local/Cellar/openjdk/16.0.1/libexec/openjdk.jdk/Contents/Home/bin/java'' 以非零退出值 1 结束
尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。这是什么意思,我该如何解决?
【问题讨论】:
必须是public
或protected
。请添加完整的堆栈跟踪,而不仅仅是一个 sn-p。但是,您甚至不需要此过滤器,因为它已由 Spring Boot 注册(或者实际上是 Spring Boot 中的 OrderedHiddenHttpMethodFilter
。尽管在较新的版本中,这可能会被禁用,而是将 spring.mvc.hiddenmethod.filter.enabled=true
添加到您的 application.properties
以拥有它开启。
抱歉,添加了完整的堆栈跟踪。那么OrderedHiddenHttpMethodFilter
会自动注册吗?
是的,但如果你有更新的版本,它可能需要一个属性(见评论)(它被禁用,因为大多数人使用 Spring Boot 用于基于 REST 的微服务,这个过滤器只需要 html 表单正在提交(因为您的浏览器仅支持 GET/POST)。
【参考方案1】:
将spring.mvc.hiddenmethod.filter.enabled=true
添加到application.properties
以将其打开。
【讨论】:
以上是关于当我将@Bean 添加到主类时出现 IllegalStateException的主要内容,如果未能解决你的问题,请参考以下文章
运行 Eclipse 导出的 jar 时出现“找不到主类”错误
当我将透明度添加到 gif 并将其转换为 webm 时出现故障
当我尝试运行刚创建的jar文件时出现Maven错误“无法初始化主类”
C#程序在VS编译器加载时出现找不到方法,无法显示该程序窗体设计器