org.springframework.beans.factory.CannotLoadBeanClassException:找不到类

时间:2016-09-06 11:12:01

标签: java spring exception

我面临一个简单的问题并寻求帮助。

这是例外消息:

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);
    }

}

这是我的spring-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>

1 个答案:

答案 0 :(得分:0)

该异常清楚地说明了遗漏的内容。

它告诉您,您的Java虚拟机(JVM)在您的CLASSPATH中找不到您的DAO类ProduitImpl.class

CLASSPATH是系统上的“位置”(或文件夹),您的JVM会在其中查找.class文件以将其加载到JVM内存中并执行其中的代码。

要从.class文件中“创建”.java文件,您需要编译.java文件。

使用像Maven这样的构建工具可以轻松完成。

使用单个Maven命令:

mvn compile

您可以实现上述描述,Maven将简单地使用您的.java文件,例如:

ProduitImpl.java

并将从ProduitImpl.class文件创建。

Plus Maven会将.class文件放在您的CLASSPATH中。