@Service
전 포스팅에서 생성된 빈 객체들을 @Autowired를 사용하여 조립하였다. 이제 빈 객체들을 하나씩 어노테이션을 사용해서 생성하도록 해보자.
지난 포스팅에서 위 xml의 24라인을 어노테이션으로 바꿧다.
의존성 주입을 위해서는 @Autowired가 필요하지만
빈 객체를 생성하기 위해서는 @Component가 사용된다.
또한 @Component 어노테이션을 사용하기 위해서는 14라인의 코드가 필요하다. 해당 코드는 base-pakage에 적힌 패키지들을 둘러보며 @Component 어노테이션이 있는지 찾아보라는 것이다. 또한 이 코드가 13라인의 코드를 포함하므로 13라인은 생략할 수 있다.
이제 23라인의 JDBCNoticeService 클래스에 어노테이션을 사용해보자.
22라인을 보면 @Component대신 @Service를 사용한 것을 볼 수 있다. @Service, @Repository, @Controller모두 @Component의 역할을 수행한다.(즉 ioc컨테이너에 bean객체를 생성해주는 역할) 하지만 각 어노테이션마다 특화된 계층이 다르다. JDBCNoticeService는 Service역할을 하기 때문에 @Service 어노테이션을 사용한다.
@Controller
이전의 컨트롤러들을 인터페이스를 구현하고, ModelAndView객체에 뷰파일 정보를 심어주는 역할을 했어야 하지만 @Controller와 @RequestMapping을 사용하면 훨씬 쉽게 바꿀 수 있다.
우선 url매핑을 위해서는 아래 파란색 밑줄의 태그가 필요하다.
그 후 바뀐 컨트롤러들은 다음과 같다.
우선 index페이지를 보여주는 클래스를 컨트롤러 패키지 안에 새로 만들었다. 뷰 페이지 파일들이 폴더에서 분리되는 방식으로 컨트롤러도 분리하여 두면 관리가 훨씬 쉬어진다.
위의 코드를 보면 8번 라인에서 @Controller를 사용하여 HomeController클래스를 빈 객체로 생성해준다. 그리고 그 아래에 @RequesstMapping이라는 어노테이션이 있는데, 이는 URL매핑을 위해 필요하다.
이전에 xml에서 <bean id="/index" class="해당 클래스 루트" /> 방식으로 해줬던 것을 위와 같이 쉽게 바꿀 수 있다.
그리고 9라인의 "/"url은 아래 12라인의 "index"와 합쳐져서 "/index"로 요청을 받으면 index()메소드를 실행하게 된다.
즉 "/index"요청을 보내면 index()메소드가 실행되어 "root.index"를 문자열로 리턴하고, servlet-context.xml의 viewResolver가 나머지 경로를 붙여주어 뷰페이지를 사용자에게 보여준다.
notice관련 controller를 보자.
이전에 xml방식을 사용할 때는 notice/list를 위한 컨트롤러 클래스, notice/detail을 위한 클래스가 따로 존재했으나
어노테이션을 사용하면 그럴 필요가 없다. 15라인 처럼 /customer/notice/를 상위로 가지는 url들을 클래스 안에 메소드로 두고,
customer/notice/ + list 또는 customer/notice/ +detail 처럼
한 클래스에 안에 여러가지 url매핑이 가능해진다.( notice앞에 coutomer가 붙은 이유는 아래 이미지처럼 실제 뷰 페이지인 jsp파일들의 notice폴더가 customer폴더 안에 있기 때문)
controller를 만들 때 위와 같은 jsp파일의 폴더들을 따라 만들면 controller관리가 수월해진다.
아래는 뉴렉처님 강의
https://www.youtube.com/watch?v=OS-Oo-DdxG4&list=PLq8wAnVUcTFWhDFFmpJ5fUeoJI53Z83g6&index=30
'java spring > spring mvc' 카테고리의 다른 글
spring mvc 07 - @RequestParam으로 쿼리스트링 받기 (0) | 2021.05.08 |
---|---|
spring mvc 06 - @RestController로 JSON응답하기 (0) | 2021.05.07 |
spring mvc 04 - annotation으로 DI하기(@Autowired) (0) | 2021.05.06 |
spring mvc 03 - static파일 열어주기 (0) | 2021.05.01 |
spring mvc 02 - ViewResolver사용하기 (0) | 2021.05.01 |