报错 org.springframework.beans.factory.UnsatisfiedDependencyException。

自己写了个demo,没有连接数据库操作的时候运行正常,集成mybatis后启动报错,找不到dao层bean。

org.springframework.beans.factory.UnsatisfiedDependencyException:
 Error creating bean with name 'userServiceImpl': 
 Unsatisfied dependency expressed through field 'userMapper'; 
 nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
 No qualifying bean of type 'com.zt.mapper.UserMapper' available: 
 expected at least 1 bean which qualifies as autowire candidate.
 Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
  
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:586)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1341)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:572)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:409)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4861)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
	
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type 'com.zt.mapper.UserMapper' available:
expected at least 1 bean which qualifies as autowire candidate.
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1506)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:583)
	... 24 common frames omitted

首先根据这个报错信息提示 在注解@Autowired 中加入属性@Autowired(required=true)

Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

加入注解后启动未报错,但是调用dao层时显示null。还是bean未装载。

在网上找了很多解决方案,都不是我遇到的问题,基本上大部分都是说配置扫描dao层的路径错了

一,

在spring-servlet.xml中配置:

<!-- 加载配置文件 -->
 	<import resource="classpath*:/spring-mybatis.xml"/>
    <context:component-scan base-package="com.zt.service.**,com.zt.mapper.**,com.zt.service.impl.**" annotation-config="true">
    	 <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
<!-- 注解扫描包 -->  
    <context:component-scan base-package="com.zt.controller.**">  
    	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>
    <mvc:annotation-driven/>

二,

还有的是说service层未添加@service 注解,但是未加注解是报错
Unsatisfied dependency expressed through field ‘XXXserviceImpl’;

 @Service

我的问题就是配置文件放置的目录不对 新建一个resource文件,将配置文件放在src/resource目录下。
报错 org.springframework.beans.factory.UnsatisfiedDependencyException。_第1张图片
改成下面这样就可以正常启动加载了。
报错 org.springframework.beans.factory.UnsatisfiedDependencyException。_第2张图片
由于对springmvc-servlet.xml , spring-context.xml(applicationContext.xml) 概念比较模糊顺便学习了一下

  1. applicationContext.xml是ContextLoaderListener执行加载的,而xxx-servlet.xml是DispatcherServlet的执行加载的
  2. 加载的先后顺序是listener>filter>servlet;
  3. spring-servlet.xml可以对视图文件(如freemarker、jsp等)进行初始化操作,如定义视图文件的位置,定义全局变量、定义拦截器等等。
  4. spring-context.xml是应用上下文、全局的配置。其启动配置一般在web.xml的Listener节点中, 注意Listener和servlet的区别,加载优先级是Listener大于servlet,同时两者性质也不同,Listener的操作是对一个事件对象的监听,而servlet和filter比较类似,是对于URL的一种匹配拦截。

以下是详细配置:

web.xml

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0">
   <context-param>
   	<param-name>contextConfigLocationparam-name>
   	<param-value>classpath:spring-context.xmlparam-value>
   context-param>
   <listener>
   	<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
   listener>
   
   
   <filter>
   	<filter-name>encodingFilterfilter-name>
   	<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
   	<init-param>
   		<param-name>encodingparam-name>
   		<param-value>UTF-8param-value>
   	init-param>
   	<init-param>
   		<param-name>forceEncodingparam-name>
   		<param-value>trueparam-value>
   	init-param>
   filter>
   
   <filter-mapping>
   	<filter-name>encodingFilterfilter-name>
   	<url-pattern>/*url-pattern>
   filter-mapping>
   
   <servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>/resource/*url-pattern>
   servlet-mapping>
   
   <session-config>
   	<session-timeout>1440session-timeout>
   session-config>
   <mvc:default-servlet-handler/>
   
 	<servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>*.jsurl-pattern>
 	servlet-mapping>
 	<servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>*.cssurl-pattern>
 	servlet-mapping>
 	<servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>*.pngurl-pattern>
 	servlet-mapping>
 	<servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>*.jpgurl-pattern>
 	servlet-mapping>
   <servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>*.icourl-pattern>
 	servlet-mapping>
 	<servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>*.mp4url-pattern>
 	servlet-mapping>
 	<servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>*.gifurl-pattern>
 	servlet-mapping>
   <servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>*.mapurl-pattern>
 	servlet-mapping>
 	<servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>*.jsonurl-pattern>
 	servlet-mapping>
 	<servlet-mapping>
   	<servlet-name>defaultservlet-name>
   	<url-pattern>*.cururl-pattern>
 	servlet-mapping>

   <servlet> 
   	<servlet-name>springservlet-name>
   	<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
   	<init-param>
   		<param-name>contextConfigLocationparam-name>
   		<param-value>classpath:spring-servlet.xmlparam-value>
   	init-param>
   	<load-on-startup>1load-on-startup>
   servlet>
   <servlet-mapping>
   	<servlet-name>springservlet-name>
   	<url-pattern>/url-pattern>
   servlet-mapping>
web-app>
spring-contextx.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"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans   
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context.xsd
   http://www.springframework.org/schema/tx 
   http://www.springframework.org/schema/tx/spring-tx.xsd">
   
	<import resource="classpath*:/spring-mybatis.xml"/>
   <context:component-scan base-package="com.zt.service.**,com.zt.mapper.**,com.zt.service.impl.**" annotation-config="true">
   	 <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
   context:component-scan>
   <aop:aspectj-autoproxy/>
beans>
spring-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"  
   xmlns:task="http://www.springframework.org/schema/task" 
   xsi:schemaLocation="http://www.springframework.org/schema/beans   
   http://www.springframework.org/schema/beans/spring-beans.xsd  
   http://www.springframework.org/schema/context  
   http://www.springframework.org/schema/context/spring-context-4.1.xsd  
   http://www.springframework.org/schema/mvc  
   http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
    http://www.springframework.org/schema/task 
      http://www.springframework.org/schema/task/spring-task-3.0.xsd ">  
     
   <context:component-scan base-package="com.zt.controller.**">  
   	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
   	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
   context:component-scan>
   <mvc:annotation-driven/>
   <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
 	 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
       
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
       <property name="prefix" value="/main/webapp/jsp/">property>  
       <property name="suffix" value=".jsp">property>  
   bean>  
	
   <mvc:resources mapping="/resource/**" location="/resource/"/>
beans>  
spring-mybatis.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:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
	http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    <context:property-placeholder location="classpath*:mybatis.properties"/>

    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="10"/>
        <property name="maxIdle" value="5"/>
    bean>
    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.zt.model" />
        <property name="mapperLocations" value="classpath*:com/zt/mapper/mapping/*.xml"/>
        
        <property name="configLocation" value="classpath:mybatis-conf.xml" />
    bean>
     
  
      
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    bean> 
    <tx:annotation-driven transaction-manager="txManager"/>
	
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	    <property name="basePackage" value="com.zt"/>
	    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory">property>
	bean>
beans>

mybatis-conf.xml


 <configuration>
 
 	<settings>
        
        <setting name="cacheEnabled" value="true"/>
        
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="multipleResultSetsEnabled" value="true"/>
        <setting name="useColumnLabel" value="true"/>
        <setting name="defaultExecutorType" value="REUSE"/>
        <setting name="defaultStatementTimeout" value="25000"/>
    settings>
    
     
     
 
     
    
 configuration>

你可能感兴趣的:(springmvc,exception)