2016-07-27 24 views
0

問題非常奇怪。我的IDE是IDEA。 Spring版本是4.3.1.RELEASE.The吹是我的項目結構 enter image description hereSpringMVC BeanCreationException:在文件PersonServiceImpl.class中定義名爲'personService'的Bean?

這一擊的web.xml(簡單)

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.4" 
     xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

    <display-name>Spring MVC Application</display-name> 
    <servlet> 
     <servlet-name>SpringMVC</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml, 
      /WEB-INF/infrastructure.xml 
     </param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet-mapping> 
     <servlet-name>SpringMVC</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>SpringMVC</servlet-name> 
     <url-pattern>/home/profile</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>default</servlet-name> 
     <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 
</web-app> 

的apllicationContext.xml只有一行

<context:component-scan base-package="net.codespace.entity, net.codespace.DAO, net.codespace.service" /> 

的爆破用SpringMVC是-servlet.xml中

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <context:component-scan base-package="net.codespace" /> 
    <mvc:annotation-driven /> 
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/home/" /> 
     <property name="suffix" value=""/> 
    </bean> 
</beans> 

每sonDAO是接口。代碼是Blow

import net.codespace.entity.Person; 

public interface PersonDAO { 
    public void save(Person p); 
    public void findAll(); 
} 

PersonDAOImpl是實現。

import net.codespace.entity.Person; 
import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Repository; 

@Repository("personDAO") 
public class PersonDAOImpl implements PersonDAO{ 
    @Autowired 
    private SessionFactory sessionFactory; 
    public void save(Person p){ 

    } 
    public void findAll(){ 

    } 
} 

一樣,PersonService的接口,

package net.codespace.service; 

/** 
* Created by mark on 2016/7/26. 
*/ 
import net.codespace.entity.Person; 

public interface PersonService { 
    public void savePerson(Person p); 
    public void getAllPerson(Person p); 
} 

PersonServiceImpl是打擊

import net.codespace.entity.Person; 
import net.codespace.DAO.PersonDAO; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 

@Service("personService") 
@Transactional 
public class PersonServiceImpl implements PersonService{ 
    @Autowired 
    private PersonDAO personDAO; 

    public void savePerson(Person p){ 

    } 
    public void getAllPerson(Person p){ 
     System.out.println("punk your pieese"); 
    } 
} 

聚甲醛

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>net.markliang</groupId> 
    <artifactId>lsc-toy</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
      <jackson.version>2.6.3</jackson.version> 
      <hibernate.version>4.3.5.Final</hibernate.version> 
      <spring.version>4.3.1.RELEASE</spring.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>tomcat</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>5.5.23</version> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>c3p0</groupId> 
      <artifactId>c3p0</artifactId> 
      <version>0.9.1.2</version> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.6.3</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>5.1.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>5.1.3.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.31</version> 
     </dependency> 
    </dependencies> 

</project> 

當我部署此項目,我得到了這些錯誤(顯示重要)

嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personService' defined in file 
[C:\Users\mark\IdeaProjects\SMS01\out\artifacts\SMS01_war_exploded\WEB-INF\classes\net\codespace\service\PersonServiceImpl.class]: Post-processing failed of bean type [class net.codespace.service.PersonServiceImpl] failed; nested exception is java.lang.IllegalStateException: Failed to introspect bean class [net.codespace.service.PersonServiceImpl] for persistence metadata: could not find class that it depends on 
Caused by: java.lang.IllegalStateException: Failed to introspect bean class [net.codespace.service.PersonServiceImpl] for 
persistence metadata: could not find class that it depends on 
/* some info */ 

Caused by: java.lang.NoClassDefFoundError: Lnet/codespace/DAO/PersonDAO; 
/* some info */ 

Caused by: java.lang.ClassNotFoundException: net.codespace.DAO.PersonDAO 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1891) 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1734) 
    /*some info */ 

有人可以幫我嗎?如果你需要更多的詳細信息,我可以給你發郵件。謝謝

+0

請顯示您的PersonService接口。 –

+0

是的,它已經添加到問題 – markliang

+0

你可以顯示來自'PersonDAO'的代碼嗎?你最近編了你的代碼嗎? –

回答

0

java.lang.ClassNotFoundException: net.codespace.DAO.PersonDAOjava.lang.NoClassDefFoundError: Lnet/codespace/DAO/PersonDAO應該是主要關心的問題。

您需要檢查爲什麼PersonDAO在類路徑中不可用。請嘗試以下操作:

  • 您的PersonDAO.java文件中的包裝聲明是否與文件夾結構匹配? (它可能在您的文章中被忽略或者從文件中丟失),即package net.codespace.DAO;
  • 運行mvn clean install和(確保它編譯並完成正常)檢查是否存在target/classes/net/codespace/DAO/PersonDAO.class
  • 如果以上方法正確,那麼您將需要檢查類路徑以瞭解爲什麼它找不到此類 - 這取決於您如何運行應用程序(在IDE或Maven等中)。

NB這不應該的問題,但Java naming convention for packages是小寫因此,最好你的包名稱應該是net.codespace.dao

1

你需要知道的applicationContextservlet-context之間的差值(看看這個answer

您的servlet上下文不應該掃描持久層,因爲持久層應該有一個應用程序範圍,這意味着可用於所有servlet。

在用SpringMVC你,只掃描控制器:

<context:component-scan base-package="net.codespace.contrller" /> 

在你的應用環境下,你應該掃描存儲庫和服務,讓您能豆它們連接。

+0

我試試你的方式,但沒有結果 – markliang

相關問題