자바 어플리케이션은 기본적으로 두 가지의 설정 방식을 따른다. 첫 번째는 고전적으로 사용해왔던 xml 파일을 이용하는 방식이며, 두 번째는 어노테이션(Annotation)을 이용하는 방식이다.
이번 시간에는 이전 시간까지 xml 파일로 구현했던 스프링 설정을 어노테이션으로 변경하고자 한다.
우선 서비스 객체를 DI(Dependency Injection) 부분을 먼저 변경하려고 한다.
위 부분에서 <property> 태그 부분을 주석처리 한 뒤, 이를 어노테이션으로 대체할 것이다. 주석처리가 되었으면 ListController 클래스의 객체 변수 위에 다음과 같이 어노테이션을 달아준다.
어노테이션의 위치는 변수 위, setter 함수 위 등 상황에 따라 달라질 수 있다. 우리와 같은 경우에는 setter 함수가 실행되면서 추가로 실행시킬 구문이 따로 없기 때문에 위처럼 객체 변수 위에 지정해주었으며 이제 setter 함수는 필요가 없으므로 지워준다.
이제 다시 servlet-context.xml 파일로 돌아와 현재 DI를 어노테이션을 통해서 수행하고 있다는 것을 알려주기 위한 구문을 추가해주어야 한다. 그렇지 않으면 클래스 파일을 뒤져보지 않을 것이며, 객체 또한 제대로 생성되지 않을 것이다.
따라서 다음과 같이 파일에 코드를 추가 및 수정해준다.
이후 페이지를 실행하여 DI가 잘 동작하는지 확인한다.
servlet-context.xml 파일과 마찬가지로 service-context.xml 파일 또한 DI를 수행하는 구문이 있다. 해당 구문 역시 위와 같은 방식으로 어노테이션으로 변경해주면 된다.
이번에는 <bean> 태그까지 모두 어노테이션으로 대체하여 서비스 객체를 생성하는 작업을 수행하고자 한다.
우선 해당 부분을 주석처리 한 뒤, 아래의 코드를 추가해준다.
위 태그는 지정된 패키지 안에 있는 클래스를 스캔하여 @Component가 붙어있는 클래스를 찾아 객체를 생성해준다.
따라서 이제 우리는 JDBCNoticeService 클래스를 열어 해당 클래스 위에 @Component 어노테이션을 붙여주기만 하면 된다.
이후 다시 service-context.xml 파일로 돌아와 위에서 작성한 태그의 속성으로 JDBCNoticeService의 상위 패키지를 지정해주면 된다.
참고로 <component-scan> 태그의 경우 <annotation-config> 태그의 기능을 포함하고 있으므로 이전에 작성하였던 <annotation-config> 태그는 주석처리 또는 삭제해주어도 상관 없다.
이후 페이지를 실행하여 잘 작동하는 확인한다.
추가적으로 @Component 어노테이션은 의미론적으로 나눌 수 있는데, 그 종류로는 @Controller, @Service, @Repository 등이 있다. 따라서 위의 경우는 역할을 분명하게 구분짓기 위해서 @Component가 아닌 @Service를 붙여주는 것이 바람직 할 것이다.
이어서 컨트롤러를 어노테이션을 이용하여 객체화하는 작업을 수행해보자.
우선 IndexController 클래스를 열고 @Controller 어노테이션을 달아준다. 또한 더 이상 Controller 인터페이스를 구현할 필요가 없으므로 해당 부분을 모두 주석처리하거나 삭제한 뒤, 다음과 같이 구현해주었다.
이제 servlet-context.xml 파일을 열고 이전에 컨트롤러 객체를 생성했던 부분을 주석처리 한 뒤, 다음의 코드를 추가해준다.
위 코드를 통해 실질적인 매핑이 이루어지며 url 요청에 의해 파일을 탐색하여 뷰 페이지를 보여줄 수 있다. 여기서 놀라운 점은 우리가 작성한 함수는 반환값도 없으며 파일 형식을 제대로 지정해주지 않았음에도 Resolver로 설정된 형식에 따라 알아서 파일을 찾아 출력해준다는 것이다.
'🍃 Spring, Spring Boot > 스프링 프레임워크 기초' 카테고리의 다른 글
[Java / Spring] 20. 문서 출력방법 (0) | 2022.04.25 |
---|---|
[Java / Spring] 19. Root / HomeController (0) | 2022.04.25 |
[Java / Spring] 17. 스프링 설정파일(dispatcher-servlet.xml) 분리하기 (0) | 2022.04.23 |
[Java / Spring] 16. 데이터 서비스 클래스 준비 및 객체 사용하기 (0) | 2022.04.23 |
[Java / Spring] 15. Tiles 설정하기 (0) | 2022.04.21 |