消息关闭
    暂无新消息!
项目结构
是一个maven聚合项目,目前common是空的,有用的是dao,service,controller模块;
dao的spring配置文件
内容:
 <!-- 自动扫描 -->  
    <context:component-scan base-package="com.wkf" />
    <!--配置整合mybatis过程-->
<bean id="propertyConfigurer"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location" value="classpath:config/jdbc.properties" />  
    </bean> 
    <!--2.数据源druid -->
<bean id="dataSourceMall" class="com.alibaba.druid.pool.DruidDataSource" 
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />

 <!-- 配置初始化大小、最小、最大 -->  
    <property name="initialSize" value="${druid.pool.size.init}" />  
    <property name="minIdle" value="${druid.pool.size.min}" />   
    <property name="maxActive" value="${druid.pool.size.max}" />  
    
    <!-- 配置监控统计拦截的filters,wall用于防止sql注入,stat用于统计分析 -->
    <property name="filters" value="wall,stat" /> 
</bean>

<!--3、配置SqlSessionFactory对象-->
    <bean id="mybatisSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据库连接池-->
        <property name="dataSource" ref="dataSourceMall"/>
        <!--配置mybatis全局配置文件:mybatis-config.xml-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--扫描sql配置文件:mapper需要的xml文件-->
       <property name="mapperLocations">
            <list>
                <value>classpath*:/mapper/*/*.xml</value>
            </list>
      </property>
    </bean>

    <!--4、配置扫描Dao接口包,动态实现DAO接口,注入到spring容器-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注入SqlSessionFactory-->
        <property name="sqlSessionFactoryBeanName" value="mybatisSqlSessionFactory"/>
        <!-- 给出需要扫描的Dao接口-->
        <property name="basePackage" value="com.wkf.dao"/>
    </bean>


service的spring配置文件内容;
<!-- Service层级-->
    <context:component-scan base-package="com.wkf" />
    <!--     配置事务管理器(mybatis采用的是JDBC的事务管理器)-->
    <bean id="transactionManagerMall" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSourceMall"></property>
    </bean>
  <!--   配置基于注解的声明式事务,默认使用注解来管理事务行为 -->
    <tx:annotation-driven transaction-manager="transactionManagerMall"/>

controller的spring配置文件
<context:component-scan base-package="com.wkf" />
<!--导入common的配置文件 -->
<import resource="classpath*:spring/spring-service.xml"/>
<import resource="classpath*:spring/spring-dao.xml"/>
<!--配置springMVC -->

    <!-- 自动扫描且只扫描@Controller -->
<!-- <context:component-scan base-package="com.wkf.controller" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan> -->
<!--1:开始springMVC注解模式 -->
<!--简化配置: 1、自动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter 
2、提供一系列:数据绑定,数字和日期的format,@NumberFormat,@DataTimeFormat,xml,json默认读写支持 -->
<mvc:annotation-driven />

<!--2:静态资源默认servlet配置 1、加入对静态资源的处理:js,css,gif,png 2、允许使用"/"做整体映射 -->

<mvc:default-servlet-handler />


<aop:aspectj-autoproxy proxy-target-class="true" />

<!-- 完成请求和注解POJO的映射 -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="stringHttpMessageConverter"></ref>
<ref bean="mappingJacksonHttpMessageConverter"></ref>
</list>
</property>
</bean>
<!-- MappingJacksonHttpMessageConverter- -->
<bean name="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
<!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
<bean name="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
    <!-- 8:多部分文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     <property name="maxUploadSize" value="104857600" />
     <property name="maxInMemorySize" value="4096" />
     <property name="defaultEncoding" value="UTF-8"></property>
</bean>

问题:service可以注入,并在controller注入并访问,但是在service中注入mapper出现无法注入的错误;
上代码
@Service
public class WkfUserInfoServiceImpl implements WkfUserInfoService {

@Autowired
private WkfIntroUserMapper wkfIntroUserMapper;
public String getUserName() {
return "test";
}
在这里不注入mapper不会出问题,service可以正常注入,加了之后mapper无法注入
Error creating bean with name 'test': Unsatisfied dependency expressed through field 'wkfUserInfoService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'wkfUserInfoServiceImpl': Unsatisfied dependency expressed through field 'wkfIntroUserMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.wkf.dao.user.WkfIntroUserMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
来个大神指点下吧

4个回答

︿ 3
NoSuchBeanDefinitionException: No qualifying bean of type 'com.wkf.dao.user.WkfIntroUserMapper' available。。。。。spring容器中没有wkfIntroUserMapper这个Bean,检查一下使用MapperScannerConfigurer 自动扫描 将Mapper接口生成代理的配置是否正确?
︿ 1
<!-- 完成请求和注解POJO的映射 -->
<bean
 class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
 <property name="messageConverters">
你这里完成请求和注解pojo的映射不是自动转换注解的类。
可以改成启动spring 的注解试试:class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor";
或者使用springmvc的自动注解类试试:class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"。