작성
·
274
0
답변 1
0
안녕하세요. 윤건희님
@Bean을 사용하면 스프링 빈으로 등록되는 것은 맞습니다.
다만 @Controller 애노테이션이 없으면 스프링 컨트롤러로 인식하지 못하는 문제가 발생합니다.
@Controller 애노테이션은 2가지 기능을 함께 제공합니다.
컴포넌트 스캔의 대상
스프링 MVC의 컨트롤러로 작동
감사합니다.
영한님 저도 이것 때문에 굉장히 궁금한데요!!
HandlerMapping이 HashMap과 같은 역할을 하는건가요?
우리는 일일이 컨트롤러를 HashMap에 등록하고, 요청 url을 기반으로 HashMap에서 컨트롤러를 찾아 어뎁터에 넘겨줬습니다.
그런데 @RequestMapping("요청 주소") 어노테이션을 메소드에 붙이고는, 더이상 HashMap에 직접 등록하지 않아도 됐습니다.
이걸 바탕으로 HandlerMapping이란 클래스가 각 메소드가 요청 주소를 가지고 있고,
요청이 들어오면 DIspatcherServlet이 우리가 HashMap에서 요청 url 기반으로 컨트롤러를 찾았던 것처럼,
HandlerMapping을 호출해 요청 url에 해당하는 컨트롤러를 찾아 어뎁터에 넘겨주는 것으로 이해했어요.
그러면 스프링이 인식하고, 관리할 수 있도록 빈에 등록하면 끝인거지 왜?? @Controller를 붙여야 하나요?
저도 다 실험해 봤는데 정말 이분 말씀처럼 안되더라고요.
@Controller 어노테이션을 붙여야만 스프링 MVC의 컨트롤러로 작동한단 게 이해가 안갑니다.
HandlerMapping이 @RequestMapping 붙은 메소드 찾는 거 아닌가요?????
강의를 아무리 돌려봐도 이렇게 밖에 이해하지 못하는 제 자신이 눈물나네요..ㅜㅜㅜ
안녕하세요. JamesByron Dean님
과거에는 @RequestMapping 애노테이션만 있어도 인식이 되었는데요. 스프링에서 최신 버전으로 업데이트 하면서 @RequestMapping 애노테이션을 스프링 컨트롤러 뿐만 아니라 다른 곳에서도 사용하게 되었습니다.
이것을 명확히 구분하기 위해 @Controller 애노테이션이 있어야 스프링이 스프링 MVC의 컨트롤러로 인식하도록 변경되었습니다.
감사합니다.
현재 SpringMemberFormControllerV1이 자동으로 스프링 빈을 등록하는 상태인데
여기 직접 등록 코드를 ServletApplication에 추가한 후
SpringMemberFormControllerV1의 @Controller, @RequestMapping 애노테이션을 둘다 제거해보고, 각각 하나씩도 제거를 해보며 실행-요청하였더니 오류가 떴습니다
ServletApplication에서 직접 등록을 해주었는데 SpringMemberFormControllerV1의 자동등록(Controller,RequestMapping 애노테이션)을 제거 했다고 왜 오류가 뜨는지 궁금합니다 ㅜㅜ