2016-09-06 86 views
0

我正面臨一個簡單的問題並尋求幫助。org.springframework.beans.factory.CannotLoadBeanClassException:找不到類

這裏的異常消息:

Exception encountered during context initialization - cancelling refresh attempt: 

org.springframework.beans.factory.CannotLoadBeanClassException: Cannot 
find class [dao.ProduitImpl] for bean with name 'sybaway' defined in 
ServletContext resource [/WEB-INF/spring-beans.xml]; nested exception 
is java.lang.ClassNotFoundException: dao.ProduitImpl 


GRAVE: Exception lors de l'envoi de l'évènement contexte initialisé (context initialized) à l'instance de classe d'écoute (listener) org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [dao.ProduitImpl] for bean with name 'sybaway' defined in ServletContext resource [/WEB-INF/spring-beans.xml]; nested exception is java.lang.ClassNotFoundException: dao.ProduitImpl 
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1208) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:568) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1277) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:844) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:539) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5068) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1572) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1562) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: dao.ProduitImpl 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1858) 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1701) 
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:258) 
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:408) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1229) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1200) 
    ... 18 more 

這裏的工廠:

package dao; 

import java.util.ArrayList; 
import java.util.List; 

public class ProduitImpl implements ProduitDAO{ 

    private List<Produit> produits=new ArrayList<Produit>(); 

    public List<Produit> getProduits() { 
     return produits; 
    } 

    public void setProduits(List<Produit> produits) { 
     this.produits = produits; 
    } 

    public void init(){ 
     System.out.println("www.sybaway.com"); 
    } 

    @Override 
    public void addProduit(Produit p) { 
     p.setIdProduit(new Long(produits.size()+1)); 
     produits.add(p); 
    } 

    @Override 
    public void deleteProduit(Long id) { 
     produits.remove(getProduitById(id)); 
    } 

    @Override 
    public Produit getProduitById(Long id) { 
     Produit produit=null; 
     for(Produit p:produits){ 
      if(p.getIdProduit().equals(id)) 
       produit=p; 
       break; 
     } 
     return produit; 
    } 

    @Override 
    public List<Produit> getAllProduit() { 
     return produits; 
    } 

    @Override 
    public void updateProduit(Produit p) { 

    } 

} 

這裏是我的ProduitImplMetier.java:

package service; 

    import java.util.List; 

    import dao.Produit; 
    import dao.ProduitDAO; 

public class ProduitImplMetier implements ProduitMetier { 


    private ProduitDAO dao; 

    public void setDao(ProduitDAO dao) { 
     this.dao = dao; 
    } 

    @Override 
    public void addProduit(Produit p) { 
     dao.addProduit(p); 
    } 

    @Override 
    public void deleteProduit(Long id) { 
     dao.deleteProduit(id); 
    } 

    @Override 
    public List<Produit> getAllProduit() { 
     return dao.getAllProduit(); 
    } 

    @Override 
    public Produit getProduitById(Long id) { 
     return dao.getProduitById(id); 
    } 

} 

這裏是我的春天-beans.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" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-2.5.xsd 
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 


<bean id="sybaway" init-method="init" class="dao.ProduitImpl" ></bean> 

<bean id="sybawayServices" class="service.ProduitImplMetier" > 
    <property name="dao" ref="sybaway" ></property> 
</bean> 

</beans> 
+0

你能分享你的spring-beans.xml嗎 –

+0

我已經分享了我的spring-beans.xml – khalid

+0

奇怪。你能清理和重建你的應用程序嗎? – Jens

回答

0

這個例外清楚地告訴我們缺少了什麼。

它告訴你你的Java虛擬機(JVM)在你的CLASSPATH中找不到你的DAO類ProduitImpl.class

CLASSPATH是系統上的「位置」(或文件夾),JVM在其中查找.class文件以將它們加載到JVM內存並執行其中的代碼。

爲了從您的.java文件中「創建」.class文件,您需要編譯.java文件。

這可以使用像Maven這樣的構建工具輕鬆完成。

通過單一的Maven命令:

mvn compile 

可以實現上面所描述的,Maven會簡單地把你的.java文件,如:

ProduitImpl.java

將從中ProduitImpl.class創建文件。

加上Maven會將那個.class文件放在你的CLASSPATH中。

+0

我已經在目錄build/classes/dao – khalid

+0

中有文件ProduitImpl.class然後我假設JVM嘗試從另一個不正確的系統位置讀取CLASSPATH。試着弄清楚你的輸出文件夾在哪裏,在eclipse編輯器中你可以在_italic_ Java Build Path_italic_下查找它。給Maven構建工具一個機會,這是我的選擇,它會讓你更容易。 –