使用SpringMVC注解@Autowired自动生成时报错,跪请大神

记录自己的足迹 2016-05-18 10:53:02
问题报错信息:
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>
...全文
223 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
街头小贩 2016-05-26
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
找到原因了:service层缺少@sercice备注

24,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Apache
社区管理员
  • Apache
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧