我正在使用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>