啟動TOMCAT服務器 報如下錯誤
2013-2-2 15:42:20 org.apache.catalina.core.StandardWrapperValve invoke 嚴重: Allocate exception for servlet Spring MVC Dispatcher Servlet org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.ait.ess.service.impl.ModifyPassWordSerImpl] 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)} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:924) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:793) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 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:212) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source)
問題出現背Spring 框架下面 建立如下
Controller --> Service --->Dao --->.xml (ibaties配置文件)
正確格式
1 將SQ語句寫入sqlModifyPassword.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <sqlMap namespace="ess.modifypassword"> <update id="modifyPassword" parameterClass="linkMap"> <![CDATA[ UPDATE sy_user set PASSWORD = #PASSWORD# where PERSON_ID = #PERSON_ID# and CPNY_ID = #CPNY_ID# ]]> </update> </sqlMap>
將上述文件添加入總配置文件 sqlMapConfig.xml
<sqlMap resource="com/ait/ess/dao/sql/sqlModifyPassword.xml" />
2 DAO實現類 注意@Repository 標志
@Repository public class ModifyPassWordDaoImpl extends SqlMapClientSupport implements ModifyPassWordDao { @Override public boolean modifyPassword(Object obj) { try { this.update("ess.modifypassword.modifyPassword", obj); } catch (SQLException e) { e.printStackTrace(); return false; } return true; } }
DAO 接口 --無特殊之處
public interface ModifyPassWordDao { /** * 修改密碼(change password) */ public boolean modifyPassword(Object obj); }
3 Service 實現類 @Service 標志很重要
@Service public class ModifyPassWordSerImpl implements ModifyPassWordSer { Logger logger = Logger.getLogger(ModifyPassWordSerImpl.class); @Autowired private ModifyPassWordDao ModifyPassWordDao; @Override public boolean modifyPassword(HttpServletRequest request) throws Exception { // TODO Auto-generated method stub // 頁面提交數據 LinkedHashMap paramMap = getMapByRequest(request); return this.ModifyPassWordDao.modifyPassword (paramMap); /** * 方法說明(中文,英文) * @param parameterObject * @return * @throws Exception */ } /** * 通過request請求封裝查詢條件(get search conditions for request) * * @param request * @return */ private LinkedHashMap getMapByRequest(HttpServletRequest request) { AdminBean admin = SessionUtil.getLoginUserFromSession(request); // 頁面提交數據 LinkedHashMap paramMap = ObjectBindUtil.getRequestParamData(request); paramMap.put("PERSON_ID", admin.getPersonId()); paramMap.put("CPNY_ID", admin.getCpnyId()); paramMap.put("PASSWORD", admin.getPassword ()); return paramMap; } }
Service 接口 -- 無特殊之處
public interface ModifyPassWordSer { public boolean modifyPassword(HttpServletRequest request) throws Exception; }
Ctroller
@Controller @RequestMapping(value = "/ess/modify") public class ModifyPassWordCtroller { Logger logger = Logger.getLogger(ModifyPassWordCtroller.class); @Autowired private ModifyPassWordSer modifyPassWordSer; /** * 密碼修改(change password) * * @param request * @param response * @param modelMap * @return * @throws Exception */ @SuppressWarnings("unchecked") @RequestMapping(value = "/ModifyPassword") public Map<String, Object> viewPersonInfoApplyConfirmList( HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws Exception { Map<String, Object> map = new HashMap<String, Object>(); boolean result; try { result = modifyPassWordSer.modifyPassword(request); if (result) { map.put("navTabId", "ess0301"); map.put("message", TipMessage.getTipMessage("alert.message.hr.modifypassword.modifypassword_success",request));//個人密碼修改成功 map.put("statusCode", "200"); // map.put("callbackType", "closeCurrent"); } else { map.put("message", TipMessage.getTipMessage("alert.message.hr.modifypassword.modifypassword_fail",request));//個人密碼修改失敗,請重試! map.put("statusCode", "300"); } } catch (Exception e) { e.printStackTrace(); } return map; } }