【问题标题】:CannotLoadBeanClassException: Error loading class [closed]CannotLoadBeanClassException:加载类时出错[关闭]
【发布时间】:2022-10-25 16:49:16
【问题描述】:

最近在学习Spring框架。 所以,我正在尝试检查依赖注入在 spring 框架中是如何工作的。 结果我创建了一个新的java项目 运行我的项目后,我收到此错误

主.java

package com.exe;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.to.someBO;

public class Main {
    public static void main(String[] args) {
        ApplicationContext ap = new ClassPathXmlApplicationContext("beans.xml");
        someBO bo = ap.getBean("proxy", someBO.class);
        bo.Validate();
        try {
            bo.Validate(17);
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
}

豆类.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop=" http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/beans/spring-aop.xsd">

    <bean id="bo" class="com.to.SomeBO"></bean>

    <bean id="ba" class="com.apps.BeforeAdvisor"></bean>
    <bean id="aa" class="com.apps.AfterAdvisor"></bean>
    <bean id="bh" class="com.apps.BothAdvisor"></bean>
    <bean id="ea" class="com.apps.ExceptionAdvisor"></bean>
    <bean id="proxty"
        class="org.springFramework.aop.framework.ProxyFactoryBean">
        <property name="target" ref="bo"></property>
        <property name="interceptorName">
            <list>
                <value>aa</value>
            </list>
        </property>
    </bean>
</beans>

异常顾问


import org.springframework.aop.ThrowsAdvice;

public class ExceptionAdvisor implements ThrowsAdvice {

    public void afterThrowing(Exception ex) {
        System.out.println("Additional concern if exception occurs");
    }

}

前顾问


import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class BeforeAdvisor implements MethodBeforeAdvice{
    @Override
    public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable{
        System.out.println("Logging before call of method "+arg0.getName());
    }

}

后顾问


import java.lang.reflect.Method;

import org.aspectj.weaver.patterns.ThrowsPattern;
import org.springframework.aop.AfterReturningAdvice;

public class AfterAdvisor implements AfterReturningAdvice{
    
    @Override
    public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable{
        System.out.println("Some stuff port method call"+arg1.getName());
    }

}

两者顾问

package com.apps;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class BothAdvisor implements MethodInterceptor {
    @Override
    public Object invoke(MethodInvocation arg0) throws Throwable {
        System.out.println("Before Method");
        arg0.proceed();
        System.out.println("After method");
        return null;
    }
}

一些BO

package com.to;

public class someBO {
    public void Validate() {
        System.out.println("Validation stuff from BO");
    }

    public void Validate(int age) throws Exception {
        if (age < 18) {
            throw new ArithmeticException("Not Valid Age");

        } else {
            System.out.println("Vote Confirmed");
        }
    }
}

and My Folder Structure is like this

and I'm getting error like this

WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [com.to.SomeBO] for bean with name 'bo' defined in class path resource [beans.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: com/to/someBO (wrong name: com/to/SomeBO)
Exception in thread "main" org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [com.to.SomeBO] for bean with name 'bo' defined in class path resource [beans.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: com/to/someBO (wrong name: com/to/SomeBO)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1489)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:681)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:648)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1614)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1090)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:877)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
    at com.exe.Main.main(Main.java:10)
Caused by: java.lang.NoClassDefFoundError: com/to/someBO (wrong name: com/to/SomeBO)
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:467)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:284)
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:469)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1551)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1478)
    ... 10 more

【问题讨论】:

    标签: java spring spring-boot spring-aop


    【解决方案1】:

    bean.xml 中“bo”的定义指向未定义的类SomeBO。将其重命名为 someBO 应该可以解决问题。

    【讨论】:

      【解决方案2】:

      Java 区分大小写 - 比较 SomeBOsomeBO

      【讨论】:

      猜你喜欢
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多