[英]org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class
I'm facing a simple problem and seek for help. 我面临一个简单的问题,正在寻求帮助。
Here's the exception message: 这是异常消息:
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
Here's the factory: 这是工厂:
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) {
}
}
Here's my ProduitImplMetier.java : 这是我的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);
}
}
Here's my spring-beans.xml: 这是我的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>
The exception tells clearly what is missing. 该异常清楚地表明了缺少的内容。
It tells you that your Java Virtual Machine (JVM), can't find your DAO Class ProduitImpl.class
, in your CLASSPATH. 它告诉您Java虚拟机(JVM)在CLASSPATH中找不到DAO类
ProduitImpl.class
。
The CLASSPATH is a "location" (or folder) on your system where your JVM looks for .class
files to load them into the JVM memory and execute the code inside them. CLASSPATH是系统上JVM的“位置”(或文件夹),JVM在其中查找
.class
文件,以将它们加载到JVM内存中并在其中执行代码。
In order to "create" .class
files from your .java
files, you'll need to compile your .java files. 为了从您的
.java
文件中“创建” .class
文件,您需要编译.java文件。
That can be done easily with a build tool like Maven. 使用Maven之类的构建工具可以轻松完成此操作。
With a single Maven command: 使用单个Maven命令:
mvn compile
You can achieve the described above, Maven will simply take your .java files, like: 您可以实现上述描述,Maven只需获取您的.java文件,例如:
ProduitImpl.java
And will create from it ProduitImpl.class
file. 并从中创建
ProduitImpl.class
文件。
Plus Maven will place that .class
file in your CLASSPATH for you. 另外,Maven会为您将
.class
文件放在CLASSPATH中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.