【问题标题】:Spring : Bean class is not recognised by the spring and throwing ClassNotFoundExceptionSpring : Spring 无法识别 Bean 类并抛出 ClassNotFoundException
【发布时间】:2014-02-13 05:41:18
【问题描述】:

我是 Spring 框架的新手,并尝试了一个相同的简单示例。

我的 com.xyz.model 包中有一个名为“Triangle”的 bean 类,我的 com.xyz.DrawingApp 包中有一个名为 DrawingApp 的主类。

这是我的 spring.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>

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

<bean id="triangle" class="com.xyz.model.Triangle">
</bean>

</beans>

Triangle.java

package com.xyz.model;

public class Triangle {
public void draw() {
    System.out.println("Triangle drawn");
}
}

DrawingApp.java

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
Triangle triangle = (Triangle)context.getBean("triangle");
triangle.draw();

我已经包含了这些罐子:

org.springframework.aop-3.1.2.RELEASE.jar
org.springframework.asm-3.1.2.RELEASE.jar
org.springframework.aspects-3.1.2.RELEASE.jar
org.springframework.beans-3.1.2.RELEASE.jar
org.springframework.context.support-3.1.2.RELEASE.jar
org.springframework.context-3.1.2.RELEASE.jar
org.springframework.core-3.1.2.RELEASE.jar
org.springframework.expression-3.1.2.RELEASE.jar
org.springframework.instrument.tomcat-3.1.2.RELEASE.jar
org.springframework.instrument-3.1.2.RELEASE.jar
org.springframework.jdbc-3.1.2.RELEASE.jar
org.springframework.jms-3.1.2.RELEASE.jar
org.springframework.orm-3.1.2.RELEASE.jar
org.springframework.oxm-3.1.2.RELEASE.jar
org.springframework.test-3.1.2.RELEASE.jar
org.springframework.transaction-3.1.2.RELEASE.jar
org.springframework.web.portlet-3.1.2.RELEASE.jar
org.springframework.web.servlet-3.1.2.RELEASE.jar
org.springframework.web.struts-3.1.2.RELEASE.jar
org.springframework.web-3.1.2.RELEASE.jar

commons-logging-1.1.3.jar
commons-logging-1.1.3-javadoc.jar
commons-logging-1.1.3-sources.jar
commons-logging-1.1.3-tests.jar
commons-logging-1.1.3-test-sources.jar
commons-logging-adapters-1.1.3.jar
commons-logging-api-1.1.3.jar
commons-logging-tests.jar

我的班级和xml文件位置是:

Triangle class is in this path -- com.xyz.model - SpringBeanFactory/src
DrawingApp class is in this path -- com.xyz.DrawingApp - SpringBeanFactory/src
spring.xml - SpringBeanFactory/src

我遇到了这个异常:

Exception in thread "main" org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.xyz.model.Triangle] for bean with name 'triangle' defined in class path resource [spring.xml]; nested exception is java.lang.ClassNotFoundException: com.xyz.model.Triangle
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1262)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1331)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:897)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:590)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.fulcum.DrawingApp.DrawingApp.main(DrawingApp.java:31)
Caused by: java.lang.ClassNotFoundException: com.xyz.model.Triangle
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:258)
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:417)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1283)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1254)
    ... 9 more

有人可以指导我解决我的问题吗?

【问题讨论】:

  • 对不起..我之前没有提出我的例外..现在编辑了问题..请看一下。
  • 你是如何编译和运行你的程序的?您的 Triangle 课程不在课程路径上。
  • 您是否将spring.xml 放在 src 文件夹中,而不是放在其他文件夹中?
  • 是的..它的路径是这个(spring.xml - SpringBeanFactory/src)
  • 在你的spring.xml中替换这段代码&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://WWW.springframework.org/dtd/spring-beans-2.0.dtd"&gt; &lt;beans&gt; &lt;bean id="triangle" class="com.xyz.model.Triangle"&gt; &lt;/bean&gt; &lt;/beans&gt;让我知道结果!

标签: java spring


【解决方案1】:

@xyz : 在你的 spring.xml 文件中替换这段代码:

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



    <bean id="triangle" class="com.xyz.model.Triangle">
    </bean>

</beans>

然后告诉我结果。

【讨论】:

  • 运气不好..仍然抛出异常:(
  • 是的,我尝试了你所建议的一切......仍然没有奏效。
【解决方案2】:

项目结构应该是这样的

DrawingApp.java:

package com.xyz.DrawingApp;   

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xyz.model.Triangle;

public class DrawingApp {

    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
        Triangle triangle = (Triangle) context.getBean("triangle");
        triangle.draw();
    }

}

Triangle.java:

package com.xyz.model;

public class Triangle {

    public void draw() {
        System.out.println(" Triangle drawn.");
    }

}

spring.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" 
         "http://WWW.springframework.org/dtd/spring-beans-2.0.dtd">

    <beans>
        <bean id="triangle" class="com.xyz.model.Triangle" />
    </beans>

效果很好。

【讨论】:

  • DrawingApp.java 文件运行您的项目。
  • 嘿,一切都一样..但是为什么它仍然没有运行?可能是jar文件的问题吗?你能分享一下你下载的jar文件或链接吗?
  • 你可以找到所有spring jar file at this link。在那里你可以看到我的答案。
  • 你在DrawingApp class..中导入了Triangle class吗?
  • 我是在 eclipse 中做的 ..所以它会自动导入
【解决方案3】:

我在使用几乎完全相同的代码(Java Brains??)时遇到了完全相同的问题,但我记得我拼错了类名 Triangle,因此我将其重构为正确的拼写并遇到了您的问题。

我放弃了整个项目,从头开始重建项目,这次成功了。

可能与类文件损坏有关,因此您可以尝试删除 bin 文件夹中的所有内容并尝试再次运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 2021-09-07
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多