简体   繁体   English

Spring/Java org.springframework.beans.factory.CannotLoadBeanClassException: 找不到类 [C:\\launchCodeFiles\\src\\main\\java\\RunMario.java]

[英]Spring/Java org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [C:\launchCodeFiles\src\main\java\RunMario.java]

I am learning Java and told to learn Spring.我正在学习 Java 并被告知要学习 Spring。 I am writing a simple program and get this error message (I am using IntelliJ Idea IDE):我正在编写一个简单的程序并收到此错误消息(我使用的是 IntelliJ Idea IDE):

first line of main
2015-05-06 11:37:38 INFO  ClassPathXmlApplicationContext:510 -   Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1e717c2: startup date [Wed May 06 11:37:38 CDT 2015]; root of context hierarchy
2015-05-06 11:37:38 INFO  XmlBeanDefinitionReader:317 - Loading XML bean definitions from class path resource [ApplicationContext.xml]
2015-05-06 11:37:39 WARN  ClassPathXmlApplicationContext:487 - Exception encountered during context initialization - cancelling refresh attempt
Exception in thread "main" org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [C:\launchCodeFiles\src\main\java\RunMario.java] for bean with name 'obstacle1' defined in class path resource [ApplicationContext.xml]; nested exception is java.lang.ClassNotFoundException: C:\launchCodeFiles\src\main\java\RunMario.java
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [C:\launchCodeFiles\src\main\java\RunMario.java] for bean with name 'obstacle1' defined in class path resource [ApplicationContext.xml]; nested exception is java.lang.ClassNotFoundException: C:\launchCodeFiles\src\main\java\RunMario.java
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1328)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1328)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:622)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:622)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:591)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:591)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1397)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1397)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:968)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:968)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:735)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:735)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at RunMario.main(RunMario.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at RunMario.main(RunMario.java:17)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Caused by: java.lang.ClassNotFoundException: C:\launchCodeFiles\src\main\java\RunMario.java
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.reflect.Method.invoke(Method.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
Caused by: java.lang.ClassNotFoundException: C:\launchCodeFiles\src\main\java\RunMario.java
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:249)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:395)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1320)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:249)
... 15 more
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:395)
at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1349)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1320)
... 15 more

Process finished with exit code 1

My ApplicationContext.xml file is as follows.我的 ApplicationContext.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="obstacle1" class="C:\launchCodeFiles\src\main\java\RunMario.java">
    <constructor-arg name= "marioObstacles" ref="obstacle"/>
    </bean>

    <bean id="obstacle" class="C:\launchCodeFiles\src\main\java\MarioObstacles.java">
    <constructor-arg name="obstacle" value="0"/>
    </bean>

</beans>

I copied and pasted the RunMario class file path from the project panel so it should be the fully qualified path.我从项目面板复制并粘贴了 RunMario 类文件路径,因此它应该是完全限定的路径。 Here is the RunMario.java file:这是 RunMario.java 文件:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Scanner;

public class RunMario {

    private MarioObstacles marioObstacles;

    public RunMario(MarioObstacles marioObstacles) {
    this.marioObstacles = marioObstacles;
    }
    public static void main(String[] arguments) {
   //        RunMario runMario1 = new    RunMario(MarioObstacles.getInstance());
        System.out.println("first line of main");

        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        System.out.println("just out of context");

        RunMario obj = (RunMario) context.getBean("obstacle1");
        obj.start();
    }

    public void start() {
        System.out.println("first line of start");
        BuildOstacles pyramid = marioObstacles.pyramid();
        pyramid.setHeight(runMario());
        pyramid.buildPyramid();
        System.out.println(pyramid);
        System.out.println("exiting start");
    }

    public static int runMario() {
        System.out.println("entering runMario");
        int height;
        do {
            Scanner scan = new Scanner(System.in);
            System.out.println("Please enter a whole number between 1 and 10");
            height = scan.nextInt();
        } while (height < 1 || height > 10);
        return height;
    }
}

I have spent 2 days searching for the answer.我花了2天时间寻找答案。 I cannot seem to figure it out.我似乎无法弄清楚。

Any suggestions?有什么建议?

You are right that you need fully-qualified class names, but in this context that means a package location , like com.yourapp.RunMario , not a file path.您需要完全限定的类名是对的,但在这种情况下,这意味着包位置,例如com.yourapp.RunMario ,而不是文件路径。

Based on your code, you don't have any packages defined (that is, you have no package at the top of your RunMario class).根据您的代码,您没有定义任何包(也就是说,您的RunMario类顶部没有package )。 It is best practice to define packages, but until you do, your fully-qualified class is simply RunMario .定义包是最佳实践,但在您这样做之前,您的完全限定类只是RunMario

In other words, where you have换句话说,你在哪里

<bean id="obstacle1" class="C:\launchCodeFiles\src\main\java\RunMario.java">
    <constructor-arg name= "marioObstacles" ref="obstacle"/>
</bean>

<bean id="obstacle" class="C:\launchCodeFiles\src\main\java\MarioObstacles.java">
    <constructor-arg name="obstacle" value="0"/>
</bean>

it should be它应该是

<bean id="obstacle1" class="RunMario">
    <constructor-arg name= "marioObstacles" ref="obstacle"/>
</bean>

<bean id="obstacle" class="MarioObstacles">
    <constructor-arg name="obstacle" value="0"/>
</bean>

I don't see any package for the class RunMario.java .我没有看到RunMario.java类的任何包。 I can see that the java class is in the parent directory.我可以看到java类在父目录中。

So instead of declaring所以而不是声明

<bean id="obstacle" class="C:\launchCodeFiles\src\main\java\MarioObstacles.java">

declare as声明为

<bean id="obstacle" class="MarioObstacles">

the problem is in your application context file;问题出在您的应用程序上下文文件中; you indicated the java source and not the compiled of your class You should write your application-context.xml in this way你指出了java源而不是你的类的编译你应该以这种方式编写你的application-context.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="obstacle1" class="RunMario">
    <constructor-arg name= "marioObstacles" ref="obstacle"/>
    </bean>

    <bean id="obstacle" class="MarioObstacles">
    <constructor-arg name="obstacle" value="0"/>
    </bean>
</beans>

Note the class must be fullqualified (package+class name)注意类必须是完全限定的(包+类名)

如果您不遵循包结构,则使用以下一个

<bean id="obstacle" class="MarioObstacles">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 org.springframework.beans.factory.CannotLoadBeanClassException:找不到类 - org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class org.springframework.beans.factory.CannotLoadBeanClassException:找不到类 - org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class 异常org.springframework.beans.factory.CannotLoadBeanClassException:找不到类 - Exception org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class 集成jsf和spring异常:org.springframework.beans.factory.CannotLoadBeanClassException:找不到类 - integration jsf and spring Exception : org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class org.springframework.beans.factory.CannotLoadBeanClassException: 找不到 class [com.spring.dao.StudentDao] - org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.spring.dao.StudentDao] org.springframework.beans.factory.CannotLoadBeanClassException:找不到类[org.springframework.orm.hibernate5.HibernateTrasactionManager] - org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.orm.hibernate5.HibernateTrasactionManager] “ org.springframework.beans.factory.CannotLoadBeanClassException:找不到类[org.springframework.jdbc.datasource - " org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.jdbc.datasource org.springframework.beans.factory.CannotLoadBeanClassException:找不到 bean 的 class [com.mchange.v2.c3p0.ComboPooledDataSource] - org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.mchange.v2.c3p0.ComboPooledDataSource] for bean 部署到glassfish服务器时出现“ org.springframework.beans.factory.CannotLoadBeanClassException:找不到类…” - “org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class…” when deploying to glassfish server org.springframework.beans.factory.CannotLoadBeanClassException:找不到名为&#39;的bean的类[com.Dao.ApplicationDaoImpl] - org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.Dao.ApplicationDaoImpl] for bean with name '
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM