项目结构
是一个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)}
来个大神指点下吧