2017-06-23 175 views
0

有一個Spring MVC的4.0.3.RELEASE和(沒有春天引導)...春季4 - 自動裝配問題:org.springframework.beans.factory.UnsatisfiedDependencyException:無型的排位豆

這實際上是一個跟進一前一後,其中一名成員告訴我要重新設計的Spring MVC控制器和DAO關係:

Spring 4 JDBC - How to load DB Properties and optimize (using Cache or DB Connection Pool)

東西顯然是不對的:

的pom.xml:

<properties> 
    <java-version>1.7</java-version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <org-springframework-version>4.0.3.RELEASE</org-springframework-version> 
</properties> 

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

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

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

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

的src /主/資源/ sampledb.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"> 

    <bean id="sampledb" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> 
     <property name="url"><value>jdbc:mysql://localhost/mydatabase?zeroDateTimeBehavior=convertToNull</value></property> 
     <property name="username"><value>root</value></property> 
     <property name="password"><value></value></property> 
     <property name="maxIdle" value="10"/> 
     <property name="maxActive" value="50"/> 
     <property name="maxWait" value="100"/> 
     <property name="defaultAutoCommit" value="false"/> 
     <property name="removeAbandoned" value="true"/> 
     <property name="removeAbandonedTimeout" value="1"/> 
     <property name="minIdle" value="0"></property> 
     <property name="timeBetweenEvictionRunsMillis" value="1000"></property> 
     <property name="minEvictableIdleTimeMillis" value="1000"></property> 
    </bean> 
</beans> 

WEB-INF/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>MyApp</display-name> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping>  
</web-app> 

WEB-INF/MVC-調度-servlet.xml中:

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

    <import resource="classpath:sampledb.xml" /> 
    <context:component-scan base-package="com.myapp.rest.controllers" /> 

    <mvc:annotation-driven /> 

    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> 
      <value>/WEB-INF/pages/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 
</beans> 

UserController中:

package com.myapp.rest.controllers; 

@Controller 
@RequestMapping("/v2") 
public class UserController { 

    private final UserDAO dao; 

    @Autowired 
    public AppUserController(UserDao dao) { 
     this.dao = dao; 
    } 

    @RequestMapping(value="appUsers/{userId}",method=RequestMethod.GET) 
    public @ResponseBody Object getUserDetails(@PathVariable String userId) { 
     Object response=null; 
     response=dao.getUser(userId); 
     return response; 
    } 
} 

userDAO的:

SEVERE: Context initialization failed 
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController' defined in file [/opt/tomcat/apache-tomcat-7.0.78/webapps/MyApp/WEB-INF/classes/com/myapp/rest/controllers/UserController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [com.myapp.rest.dao.UserDao]: : No qualifying bean of type [com.myapp.rest.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myapp.rest.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
     at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:747) 
     at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) 
    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myapp.rest.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1103) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:963) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) 
    Jun 23, 2017 12:16:51 AM org.apache.catalina.core.ApplicationContext log 
    SEVERE: StandardWrapper.Throwable 
    org.springframework.beans.factory.UnsatisfiedDependencyException:Error creating bean with name 'userController' defined in file [/opt/tomcat/apache-tomcat-7.0.78/webapps/MyApp/WEB-INF/classes/com/myapp/rest/controllers/UserController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [com.myapp.rest.dao.UserDao]: : No qualifying bean of type [com.myapp.rest.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myapp.rest.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
     at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:747) 
     at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) 

    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myapp.rest.dao.UserDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1103) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:963) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) 
     ... 35 more 

    Jun 23, 2017 12:16:51 AM org.apache.catalina.core.StandardContext loadOnStartup 
    SEVERE: Servlet [mvc-dispatcher] in web application [/MyApp] threw load() exception 
    org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myapp.rest.dao.UserDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1103) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:963) 
+0

哪個jar文件? –

+0

在lib文件夾中檢查相同的jar如果你已經添加了多次..我在這種情況下只有這個錯誤 – Hema

+0

spring-webmvc和spring-web應該是相同的版本 – Hema

回答

2

看你有沒有加包:

package com.myapp.rest.dao; 

@Repository 
@Service 
public class UserDAO { 

    private final JdbcTemplate jdbcTemplate; 

    @Autowired 
    public UserDao(@Qualifier("sampledb") DataSource dataSource) { 
     this.jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    // others methods which do the actual queries using Spring JDBC 
} 

複製戰成$ CATALINA_HOME/webapps中

Tomcat啓動,並拋出該異常到標準輸出後com.myapp.rest.dao到您的組件掃描,以便Spring無法知道如何爲您的控制器創建UserDao對象

<context:component-scan base-package="com.myapp.rest.controllers" />

變化

<context:component-scan base-package="com.myapp.rest" />

+0

是的,這個工作... –