• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

도대체 뭐 떄문인지 모르겠습니다 분명 코드 똑같은데 미치겠씁니다

21.09.04 14:57 작성 조회수 451

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.메시지 Request processing failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'loginUserBean' available

설명 서버가, 해당 요청을 충족시키지 못하게 하는 예기치 않은 조건을 맞닥뜨렸습니다.

예외

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'loginUserBean' available
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
	org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)

근본 원인 (root cause)

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'loginUserBean' available
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:863)
	org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1344)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:309)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:283)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:461)
	org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:527)
	org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497)
	org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$1.getTarget(CommonAnnotationBeanPostProcessor.java:461)
	org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:676)
	beans.UserBean$$EnhancerBySpringCGLIB$$62cae883.isUserLogin(<generated>)
	controller.UserController.login_pro(UserController.java:54)
	java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.base/java.lang.reflect.Method.invoke(Method.java:566)
	org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
	org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
	org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
	org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)


서비스 부분
package service; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import beans.UserBean; import dao.UserDao; @Service public class UserService { @Autowired private UserDao userDao; @Resource(name = "loginUserBean") @Lazy private UserBean loginUserBean; public boolean checkuserIdExist(String user_id) { String user_name = userDao.checkUserIdExist(user_id); if(user_name == null) { return true; } else { return false; } } public void addUserInfo(UserBean joinUserBean) { userDao.addUserInfo(joinUserBean); } public void getLoginUserInfo(UserBean tempLoginUserBean) { UserBean tempLoginUserBean2 = userDao.getLoginUserInfo(tempLoginUserBean); if(tempLoginUserBean2 != null) { loginUserBean.setUser_idx(tempLoginUserBean2.getUser_idx()); loginUserBean.setUser_name(tempLoginUserBean2.getUser_name()); loginUserBean.setUserLogin(true); } } }
컨트롤러 부분

package controller; import javax.annotation.Resource; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import beans.UserBean; import service.UserService; import validator.UserValidator; @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Resource(name = "loginUserBean") @Lazy private UserBean loginUserBean; @GetMapping("/login") public String login(@ModelAttribute("tempLoginUserBean") UserBean tempLoginUserBean, @RequestParam(value = "fail", defaultValue = "false") boolean fail, Model model) { model.addAttribute("fail", fail); return "user/login"; } @PostMapping("/login_pro") public String login_pro(@Valid @ModelAttribute("tempLoginUserBean") UserBean tempLoginUserBean, BindingResult result) { if(result.hasErrors()) { return "user/login"; } userService.getLoginUserInfo(tempLoginUserBean); if(loginUserBean.isUserLogin() == true) { return "user/login_success"; } else { return "user/login_fail"; } } @GetMapping("/join") public String join(@ModelAttribute("joinUserBean") UserBean joinUserBean) { return "user/join"; } @PostMapping("/join_pro") public String join_pro(@Valid @ModelAttribute("joinUserBean") UserBean joinUserBean, BindingResult result) { if(result.hasErrors()) { return "user/join"; } userService.addUserInfo(joinUserBean); return "user/join_success"; } @GetMapping("/modify") public String modify() { return "user/modify"; } @GetMapping("/logout") public String logout() { return "user/logout"; } @InitBinder public void initBinder(WebDataBinder binder) { UserValidator validator1 = new UserValidator(); binder.addValidators(validator1); } } dao부분
package dao; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import beans.UserBean; @Repository public class UserDao { @Autowired private SqlSessionTemplate sqlSessionTemplate; public String checkUserIdExist(String user_id) { return sqlSessionTemplate.selectOne("user.checkUserIdExist", user_id); } public void addUserInfo(UserBean joinUserBean) { sqlSessionTemplate.insert("user.addUserInfo", joinUserBean); } public UserBean getLoginUserInfo(UserBean tempLoginUserBean) { return sqlSessionTemplate.selectOne("user.getLoginUserInfo", tempLoginUserBean); } }

서블릿 컨테스트 부분

<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 스캔한 패키지 내부의 클래스 중 Controller 어노테이션을 가지고 있는 클래스들을 Controller로 로딩한다. --> <annotation-driven/> <!-- 스캔할 bean들이 모여있는 패키지를 지정한다. --> <context:component-scan base-package="controller"/> <context:component-scan base-package="dao"/> <context:component-scan base-package="service"/> <!-- Controller의 메서드에서 반환하는 문자열 앞뒤에 붙일 경로 정보를 셋팅한다. --> <beans:bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/"/> <beans:property name="suffix" value=".jsp"/> </beans:bean> <!-- 정적파일(이미지, 사운드, 동영상, js, css 등등) 경로 셋팅--> <resources location="/resources/" mapping="/**"></resources> <!-- properties 파일의 내용을 사용할수 있도록 bean을 정의 --> <beans:bean class='org.springframework.beans.factory.config.PropertyPlaceholderConfigurer'> <beans:property name="location"> <beans:value>/WEB-INF/properties/db.properties</beans:value> </beans:property> </beans:bean> <beans:bean class='org.apache.commons.dbcp2.BasicDataSource' id='basic_data_source'> <beans:property name="driverClassName" value="${db.classname}"/> <beans:property name="url" value="${db.url}"/> <beans:property name="username" value="${db.username}"/> <beans:property name="password" value="${db.password}"/> </beans:bean> <beans:bean class='org.mybatis.spring.SqlSessionFactoryBean' id='sqlSession'> <beans:property name="dataSource" ref='basic_data_source'/> <beans:property name="mapperLocations" value='/WEB-INF/mapper/*.xml'/> </beans:bean> <beans:bean class='org.mybatis.spring.SqlSessionTemplate' id='sqlSessionTemplate'> <beans:constructor-arg index='0' ref='sqlSession'/> </beans:bean> <interceptors> <interceptor> <mapping path="/**"/> <beans:bean class="interceptor.TopMenuInterceptor"/> </interceptor> </interceptors> <!-- messageSource를 등록한다 --> <beans:bean class='org.springframework.context.support.ReloadableResourceBundleMessageSource' id = 'messageSource'> <beans:property name="basenames"> <beans:list> <beans:value>/WEB-INF/properties/error_message</beans:value> </beans:list> </beans:property> </beans:bean> <!-- Message접근을 위한 접근자 등록 --> <beans:bean class='org.springframework.context.support.MessageSourceAccessor'> <beans:constructor-arg ref='messageSource'/> </beans:bean> </beans:beans>















답변 1

답변을 작성해보세요.

0

loginUserBean 이라는 이름의 bean을 정의하셨는지 확인해보시기 바랍니다.