当前位置:  开发笔记 > 编程语言 > 正文

org.springframework.beans.factory.CannotLoadBeanClassException:找不到类

如何解决《org.springframework.beans.factory.CannotLoadBeanClassException:找不到类》经验,为你挑选了1个好方法。

我从我的tomcat 6.0安装目录中用servle-api.com替换了j2ee.jar:这会产生下面的错误.我现在正试图找出原因.可能是什么问题.

我在配置文件中定义了一个bean:Sempedia-service.xml,如下所示


    



我的web.xml指定以下bean:


    contextConfigLocation
    /WEB-INF/Sempedia-service.xml,/WEB-INF/Sempedia-persistence.xml



    org.springframework.web.context.ContextLoaderListener

堆栈跟踪

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.service.SempediaSearchManager] for bean with name 'sempediaSearchService' defined in ServletContext resource [/WEB-INF/Sempedia-service.xml]; nested exception is java.lang.ClassNotFoundException: com.service.SempediaSearchManager
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1141)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:524)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1177)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:758)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:422)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.ClassNotFoundException: com.service.SempediaSearchManager
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:211)
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:385)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1138)
    ... 24 more

Stephen C.. 15

问题是com.service.SempediaSearchManager你的webapp的类路径上没有调用类.最可能的根本原因是:

完全限定的类名不正确/WEB-INF/Sempedia-service.xml; 即类名是别的,

该类不在您的webapp /WEB-INF/classes目录树中或目录中的JAR文件中/WEB-INF/lib.

编辑:我能想到的唯一另一件事是,ClassDefNotFoundException实际上可能是早期类加载/静态初始化问题的结果.检查日志文件中的第一个堆栈跟踪,并查看嵌套异常,即"由...引起"链.[如果类加载失败了一次,而你或者Spring Class.forName()因某种原因再次调用,那么Java实际上不会尝试第二次加载.相反,您将得到一个ClassDefNotFoundException堆栈跟踪,无法解释原始故障的真正原因.]

如果你仍然难过,你应该把Eclipse从图片中删除.以最终要部署它的形式创建WAR文件,然后从命令行创建:

    手动关闭Tomcat

    清理你的Tomcat webapp目录,

    将WAR文件复制到webapp目录中,

    启动Tomcat.

如果这不能直接解决问题,请查看Tomcat上已部署的webapp目录,以验证"缺失"类是否在正确的位置.



1> Stephen C..:

问题是com.service.SempediaSearchManager你的webapp的类路径上没有调用类.最可能的根本原因是:

完全限定的类名不正确/WEB-INF/Sempedia-service.xml; 即类名是别的,

该类不在您的webapp /WEB-INF/classes目录树中或目录中的JAR文件中/WEB-INF/lib.

编辑:我能想到的唯一另一件事是,ClassDefNotFoundException实际上可能是早期类加载/静态初始化问题的结果.检查日志文件中的第一个堆栈跟踪,并查看嵌套异常,即"由...引起"链.[如果类加载失败了一次,而你或者Spring Class.forName()因某种原因再次调用,那么Java实际上不会尝试第二次加载.相反,您将得到一个ClassDefNotFoundException堆栈跟踪,无法解释原始故障的真正原因.]

如果你仍然难过,你应该把Eclipse从图片中删除.以最终要部署它的形式创建WAR文件,然后从命令行创建:

    手动关闭Tomcat

    清理你的Tomcat webapp目录,

    将WAR文件复制到webapp目录中,

    启动Tomcat.

如果这不能直接解决问题,请查看Tomcat上已部署的webapp目录,以验证"缺失"类是否在正确的位置.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有