使用SpringMVC注解@Autowired自动生成时报错,跪请大神
问题报错信息:
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.kemile.discount.service.DiscountDetailsService com.kemile.discount.controller.DiscountDetailsController.discountDetailsService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.kemile.discount.service.DiscountDetailsService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
代码如下:
控制层:
@Controller
@RequestMapping("/DiscountDetails")
public class DiscountDetailsController {
@Autowired
private DiscountDetailsService discountDetailsService;
实现层:
public class DiscountDetailsServiceImpl extends AbstractPageService<IBaseDAO<DiscountDetails>, DiscountDetails> implements DiscountDetailsService<IBaseDAO<DiscountDetails>, DiscountDetails> {
@Autowired
private DiscountDetailsDAO discountDetailsDAO;
public IBaseDAO<DiscountDetails> getDao() { return discountDetailsDAO; }
public DiscountDetailsDAO getDiscountDetailsDAO() {
return discountDetailsDAO;
}
public BizData4Page checkDiscountDetails(@PathVariable int page, @RequestParam Map<String, Object> conditions){
return discountDetailsDAO.checkDiscountDetails(page,conditions);
}
接口层:
public interface DiscountDetailsService <D extends IBaseDAO<T>, T extends BaseDomain> extends IPageService<D, T>, IBaseService<D, T> {
BizData4Page checkDiscountDetails(@PathVariable int page, @RequestParam Map<String, Object> conditions);
}
实体层:
public class DiscountDetails extends BaseDomain {
private long phone;
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public long getPhone() {
return phone;
}
public void setPhone(long phone) {
this.phone = phone;
}
}
DAO层:
public interface DiscountDetailsDAO extends IBaseDAO<DiscountDetails> {
BizData4Page checkDiscountDetails(@PathVariable int page, @RequestParam Map<String, Object> conditions);
}
SpringMVC-servelet。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"
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-4.1.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">
<!-- 激活基于注解的bean配置 -->
<context:annotation-config />
<context:component-scan base-package="com.kemile"/>
<!-- 启用spring mvc 注解 -->
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<bean class="com.kemile.common.restful.ExtFastJsonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json;charset=UTF-8" />
<property name="features">
<array>
<value>WriteMapNullValue</value>
<value>WriteNullStringAsEmpty</value>
</array>
</property>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="prefixJson" value="false"/>
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
<value>text/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<mvc:default-servlet-handler />
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<bean id="SpringContextUtil" class="com.kemile.common.utils.SpringContextUtil" scope="singleton" />
<mvc:interceptors>
<!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求-->
<bean class="com.kemile.common.interceptor.AccessKeyInterceptor">
<property name="defaultAccessAllowedFrom">
<list>
<value>http://localhost:63342</value>
<value>http://localhost:8080</value>
<value>http://127.0.0.1:81</value>
</list>
</property>
<property name="noDefaultAccessAllowedUrl">
<list>
<value>/Order/orderList</value>
<value>/Order/submitOrder</value>
<value>/Order/bookingTickets</value>
</list>
</property>
</bean>
<!--
<mvc:interceptor>
<mvc:mapping path="/Login/**"/>
<mvc:exclude-mapping path="/Login"/>
<bean class="com.kemile.common.interceptor.InstallInterceptor"/>
</mvc:interceptor>
-->
</mvc:interceptors>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/views/" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="number_format">0.##########</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="classic_compatible">true</prop>
<prop key="template_exception_handler">ignore</prop>
</props>
</property>
</bean>
<!-- 设置freeMarker的配置文件路径 -->
<bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
<property name="cache" value="true" />
<property name="suffix" value=".html" />
<property name="contentType" value="text/html; charset=UTF-8" />
</bean>
<!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="5400000"/>
<property name="uploadTempDir" value="UploadFile"/>
</bean>
<!-- 定时器 -->
<import resource="quarttimer.xml" />
</beans>