2013-10-22 36 views
0

我剛剛開始彈簧框架,並嘗試使用此「site」中的「Hello world」教程。 我Mainapp.Java作爲在類路徑資源[bean.xml]中定義的名稱爲'helloworld'的bean找不到類[com.springdemo]

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 
+4

你錯過了bean定義中的類名。應該是'' –

+0

是的......非常感謝。 –

回答

1

當然@ CPU1已經給出了答案別的出路(自動檢測),你可以嘗試是

  1. 刪除您明確bean聲明

  2. 標註您Hello_World@Component

  3. 在您的配置文件中使用<annotation-driven />

  4. 提供使用<context:component-scan base-package="com.springdemo" />

0

謝謝豆檢測配置。我有同樣的錯誤。我給了完整的類名像org.stuff.Triangle.Java在XML文件,而不是

這是我的代碼以正確的方式

 <bean id="triangle" class="org.stuff.Triangle"/> 
0

更新bean.xml

<bean id="helloworld" class="com.springdemo.Hello_World"> 
 
    <property name="message" value="Hello World!"/> 
 
</bean>

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"); 
0

初學者,以及和我通過幾個職位去了,大約30分鐘,但我我正在使用IntelliJ而不是推薦的IDE。我有src/main/java中的Hello_World和MainApp以及src/main/resources中的bean。我終於明白,這個班級不需要位置的前綴。我知道這與這個問題並不直接相關,但它在搜索錯誤消息時位於谷歌列表的頂部。

<bean id = "helloWorld" class = "Hello_World"> 
    <property name = "message" value = "Hello World!"/> 
</bean> 
相關問題