NoSuchBeanDefinitionException:没有定义名为_的bean

时间:2015-10-27 00:33:58

标签: java spring spring-mvc exception model

我正在使用STS(Spring Tools Suite)创建一个项目,并且我继续获得" NoSuchBeanDefinitionException:没有定义名为_的bean"当我尝试将多个模型加载到我的控制器类中时。

ERROR: org.springframework.web.servlet.DispatcherServlet - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'statisticsController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'wishlistManager' is defined
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:306)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:817)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:277)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'wishlistManager' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:529)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:269)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:442)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:416)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:549)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:150)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:303)
... 35 more

这是我的控制器类中的代码。如果我注释掉所有对其中一个管理器(goalManager或wishlistManager)的引用,那么另一个将工作并加载正常,只有当我同时使用它时才会出现第二个错误。

@Resource(name="goalManager")
private GoalManager goalManager;

@Resource(name="wishlistManager")
private WishlistManager wishlistManager;

private static final Logger logger = LoggerFactory.getLogger(GoalsController.class);

private static final Logger logger2 = LoggerFactory.getLogger(WishlistController.class);

@RequestMapping(method=RequestMethod.GET)
public ModelAndView home(Model uiModel){
    logger.info("Fetching all goals");
    uiModel.addAttribute("goals", goalManager.getGoals());
    logger2.info("Fetching all rewards");
    uiModel.addAttribute("wishlists", wishlistManager.getWishlists());
    return new ModelAndView("statistics", "model", uiModel);
}

这个想法是一个统计页面,所以它需要来自网站目标和心愿单部分的数据。

这是视图

<%@ include file="/WEB-INF/views/include.jsp" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<html>
  <head><title><fmt:message key="title"/></title></head>
  <body>
    <h3>Statistics</h3>
    <ul>
    <li><a href="/elec5619/statistics/goalStatistics">Goal Statistics</a></li>
    <li><a href="/elec5619/statistics/setGoals">Make dummy goals.</a></li>
    <li><a href="/elec5619/statistics/resetGoals">Reset dummy goals.</a></li>
    <div id="progressBar">
        <progress max="100" value="80"></progress>
    </div>
    </ul>
    <p>
    Latest goal achieved: 
    <c:set var="oldDate" value="20-10-2010" />
    <fmt:parseDate value="${oldDate}" var="lastComplete" pattern="dd-MM-yyyy" />
    <c:set var="latestGoal" value=""/>

    <c:forEach items="${model.goals}" var="goal">
        <c:set var="lastCompletedAt" value = "${goal.lastCompletedAt}"/>
        <c:if test="${lastComplete < lastCompletedAt}">
            <c:set var="lastComplete" value = "${goal.lastCompletedAt}"/>
            <c:set var="latestGoal" value = "${goal.name}"/>
        </c:if>
    </c:forEach>
    <c:out value="${latestGoal}"/> at 
    <c:out value="${lastComplete}"/>
</p>
<!-- <p>
    Latest reward earned: 
</p> -->
<p>
    Total goals achieved: 
    <c:set var="goalsComplete" value = "${0}"/>
    <c:forEach items="${model.goals}" var="goal">
        <c:set var="goalsComplete" value = "${goalsComplete + goal.numTimesCompleted}"/>
    </c:forEach>
    <c:out value="${goalsComplete}"/>
</p>
<p> Total active goals:  
    <c:set var="noOfGoals" value = "${0}"/>
    <c:forEach items="${model.goals}" var="goal">
        <c:set var="noOfGoals" value = "${noOfGoals + 1}"/>
    </c:forEach>
    <c:out value="${noOfGoals}"/>
</p>

<p>
    Total money earned: 
    <c:set var="moneyEarned" value = "${0}"/>
    <c:forEach items="${model.goals}" var="goal">
        <c:set var="moneyEarned" value = "${moneyEarned + goal.numTimesCompleted*goal.rewardAmount}"/>
    </c:forEach>
    $<c:out value="${moneyEarned}"/>
</p>
<p> Total rewards earned:
    <c:set var="rewardsComplete" value = "${0}"/>
    <c:forEach items="${model.wishlists}" var = "wishlist">
        <c:if test="${wishlist.active == 0}">
            <c:set var="rewardsComplete" value = "${rewardsComplete + 1}"/>
        </c:if>
    </c:forEach>
    <c:out value = "${rewardsComplete}"/>
</p>
<p>
    Total active rewards:
    <c:set var = "activeRewards" value = "${0}"/>
    <c:forEach items="${model.wishlists}" var = "wishlist">
        <c:if test="${wishlist.active == 1}">
            <c:set var="activeRewards" value = "${rewardsComplete + 1}"/>
        </c:if>
    </c:forEach>
    <c:out value = "${activeRewards}"/>
</p>

0 个答案:

没有答案