我刚刚开始使用spring框架并尝试了这个site的“Hello world”教程。 我有 Mainapp.Java 为
package com.springdemo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");
Hello_World obj = (Hello_World)context.getBean("helloworld");
obj.getMessage();
}
}
Hello_World.java
package com.springdemo;
public class Hello_World {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
和 bean.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-2.0.xsd">
<bean id="helloworld" class="com.springdemo">
<property name="message" value="Hello World!"/>
</bean>
</beans>
错误
Exception in thread "main" org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.springdemo] for bean with name 'helloworld' defined in class path resource [bean.xml]; nested exception is java.lang.ClassNotFoundException: com.springdemo
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1173)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:479)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:787)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:393)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:736)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:369)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:123)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:66)
at com.springdemo.MainApp.main(MainApp.java:8)
Caused by: java.lang.ClassNotFoundException: com.springdemo
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:230)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:381)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1170)
... 8 more
答案 0 :(得分:2)
当然@ c.P.u1已经给出了你可以尝试的其他出路(自动检测)的答案
删除显式bean声明
使用Hello_World
@Component
添加注释
在配置文件中使用<annotation-driven />
使用<context:component-scan base-package="com.springdemo" />
答案 1 :(得分:0)
谢谢。我有同样的错误。我在xml文件中给出了像org.stuff.Triangle.Java这样的完整类名而不是
这是我的代码的正确方法
<bean id="triangle" class="org.stuff.Triangle"/>
答案 2 :(得分:0)
更新bean.xml
<bean id="helloworld" class="com.springdemo.Hello_World">
<property name="message" value="Hello World!"/>
</bean>
答案 3 :(得分:0)
确保在bean.xml中添加类位置 对于您的情况,Hello_World类是返回值的类,因此只需调用此类。
<bean id="helloworld" class="com.springdemo.Hello_World">
<property name="message" value="Hello World!"/>
</bean>
我在你的代码中注意到了另外一件事。在主类中,您必须编写getBean(Bean ID值)
所以我认为正确的应该是:
Hello_World message= (Hello_World)appContext.getBean("helloworld");
答案 4 :(得分:0)
在bean标记中,类参数应包含完整的类名路径。您尚未编写类名。 代替这个 bean id =“ helloworld” class =“ com.springdemo”
写这个 bean id =“ helloworld” class =“ com.springdemo.Hello_World”