spring 无法加载配置类

w51jfk4q  于 2022-11-21  发布在  Spring
关注(0)|答案(6)|浏览(255)

我正在学习关于如何使用Spring的this教程,根据提供的示例,我得到了以下异常:

Exception in thread "main" java.lang.IllegalStateException: Cannot load configuration class: com.tutorialspoint.HelloWorldConfig
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:378)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:263)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:265)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:126)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:609)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
    at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84)
    at com.tutorialspoint.MainApp.main(MainApp.java:9)
Caused by: org.springframework.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
    at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237)
    at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
    at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:317)
    at org.springframework.context.annotation.ConfigurationClassEnhancer.createClass(ConfigurationClassEnhancer.java:128)
    at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:100)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:368)
    ... 7 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384)
    at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)
    ... 12 more
Caused by: java.lang.SecurityException: class "com.tutorialspoint.HelloWorldConfig$$EnhancerBySpringCGLIB$$b5aece24"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:952)
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:666)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:794)
    ... 18 more

我已经研究了我的问题,并找到了this;有人也遇到了和我一样的问题,这与确保ASM与CGLIB兼容有关。然而,我尝试过这个解决方案,它没有工作,我甚至使用了与提供的版本完全相同的版本(GBLIB 2.2.2和ASM 3.3.1)。
我需要做些什么才能纠正这一点?
为了简单起见,这里是我正在使用的文件,这些文件是从提供的教程中提取的。
HelloWorldConfig.java

package com.tutorialspoint;
import org.springframework.context.annotation.*;

@Configuration
public class HelloWorldConfig {

    @Bean
    public HelloWorld helloWorld() {
        return new HelloWorld();
    }
}

HelloWorld.java

package com.tutorialspoint;

public class HelloWorld {
    private String message;

    public void setMessage(String message) {
        this.message = message;
    }

    public void getMessage() {
        System.out.println("Your Message : " + message);
    }
}

MainApp.java

package com.tutorialspoint;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;

public class MainApp {
    public static void main(String[] args) {
        @SuppressWarnings("resource")
        ApplicationContext ctx = new AnnotationConfigApplicationContext(
                HelloWorldConfig.class);

        HelloWorld helloWorld = ctx.getBean(HelloWorld.class);

        helloWorld.setMessage("Hello World!");
        helloWorld.getMessage();
    }
}

此外,通过说“然而,我已经尝试了这个解决方案,它没有工作”,我的意思是完全相同的错误返回。

axr492tv

axr492tv1#

我遇到了同样的问题,意识到我在POM.xml中的JRE版本或与项目相关的默认版本没有在类路径中设置。所以在Preferences -〉Installed JRE下更新了相同的版本,并运行了它工作的应用程序。

iecba09b

iecba09b2#

我昨天已经看过这个问题了,这就是解决办法.
1.打开Eclipse
1.在菜单栏中打开窗口-〉首选项-〉java -〉已安装的jre
1.添加新的jre,该jre安装在系统中(c:program_files-〉java-〉jre-〉bin)。
1.选择新添加的jre和BOOOM🔥🔥

4urapxun

4urapxun3#

This problem occurred due to spring dependency problem, I too used below dependency facing same issue, the configuration classes didn't loaded

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.1.6.RELEASE</version>
</dependency>

Try below one: for me it is working 

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.6.RELEASE</version>
</dependency>
fiei3ece

fiei3ece4#

所以,我会说你提到的“另一个”,有一个不同的问题。
即使“Last-Shown-Exception”与您的“Last-Shown-Exception”相同。
但是,正如您在堆栈跟踪中所看到的,“源”是一个SecurityException

  • 无法加载配置类 *-错误是后果

我想你的项目中的“代码注册”有问题
或者,由于字节码操作,寄存器被破坏。

附言

当您在项目中引用“SignedLibs”“UnsignedLibs”时,有时也会发生这种情况。
在这种情况下,从签名库中删除签名。

myzjeezk

myzjeezk5#

运行此项目所需的所有jar:

  1. org.springframework.core-3.0.1.RELEASE-A.jar
  2. spring-context-3.0.4.RELEASE.jar
  3. org.springframework.beans-3.0.1.RELEASE-A.jar
  4. commons-logging-1.1.1.jar
  5. asm-3.3.1.jar
  6. cglib-2.2.2.jar
    要获得这些jar,可以直接将下载的jar添加到项目中,也可以在pom.xml中提供以下依赖项,以便自动下载它们。
<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>
    </dependencies>

如果maven settings.xml文件中不存在以下内容,请将其添加到其中:

<profiles>
        <profile>
            <id>SPRINGLEARN</id>
            <activation>
                <jdk>1.8</jdk>
            </activation>
            <repositories>
                <repository>
                    <id>thirdPartyRepo</id>
                    <name>Third party repository</name>
                    <url>https://repo.spring.io/libs-release/</url>
                    <layout>default</layout>
                    <snapshotPolicy>always</snapshotPolicy>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>thirdPartyPluginRepo</id>
                    <name>Third party plugin repository</name>
                    <url>https://repo.spring.io/libs-release/</url>
                    <layout>default</layout>
                    <snapshotPolicy>always</snapshotPolicy>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>

在此之后,只需运行您的项目。

  • 右键单击项目-〉运行方式-〉Maven clean
  • 右键单击项目-〉运行方式-〉Maven安装
  • 右键单击项目-〉运行方式-〉Java应用程序
shyt4zoc

shyt4zoc6#

我也面临着这个问题。使用最新版本的spring.works在版本5。

相关问题