SpringFramework/BASIC

스프링의 어노테이션의 특징과 컨트롤러의 공통 URL 설정

유혁스쿨 2020. 8. 29. 02:04
728x90
반응형

 

컨트롤러 클래스를 만들었을 때 클래스 선언된 곳 위에 @Controller라고 선언해줍니다.

 

xml에서 <bean id="컨트롤러" class="패키지명.클래스명"> 으로 빈 등록을 해주는것을 대신하는 역할을해줍니다.

 

자동으로 빈 등록을하는 어노테이션은 네가지가 있습니다.

@Component, @Controller , @Service , @Repository

 

우리가 Service클래스 를 만들때는 그것을 xml을이용해서 빈등록을 할 필요가 없이 @Service를 선언해주면 됩니다.

DAO일때도 마찬가지로 xml이 아닌 해당 클래스 선언부 위에 @Repository어노테이션을 선언 해 주면 됩니다.

일반적인 클래스에도 이런식으로 bean으로 등록 시켜주도록 식별할수있게 해주는 참조 대상의 어노테이션을 사용하여 빈으로 등록을 할 수 있지만, 일반적인 클래스인데 Service Repository Controller를 명시해주는 어노테이션을 선언하기에는 의미적으로 조금 애매합니다

그래서 일반적인 클레스에는 @Component라는 어노테이션을 붙힙니다.

 

결국 이 4개의 어노테이션은 이름은 다르지만 기능은 다 똑같습니다.

사실 컨트롤러에 @Service 라고 선언해도 상관은 없습니다. 컨트롤러에 @Component라고 선언해도 상관은 없어요

하지만 이것이 명시적으로 봤을때 컨트롤러인지 서비스인지DAO인지 확실하지 않기때문에 그에 맞는 명시적인 뜻을 가지고 있는(빈등록 처리를 해주는) 어노테이션을 선언합니다 .

 

이렇게 객체화 빈을 등록시켜주는 어노테이션들로 등록된 빈들을 자동으로 검색하여 사용하기 위해서는 <context:componet-scan base-package="" /> 태그를 선언하였고 base-package 속성에 등록된 패키지.클래스 안에있는것 중에 컴포넌트가 달려있는 컨트롤러 혹은 클래스들을 스캔해서 빈등록을 처리해! 라고 xml에 선언을 해줬습니다.


@RequestMapping 공통URI 처리

@Controller
public class RequestController {
	
	@RequestMapping("/request/test") 
	public String testCall() {
		System.out.println("/request/test요청이 들어옴");
		return "test";
	}
	@RequestMapping("/request/req")
	public String req() {
		System.out.println("/request/req요청이 들어옴!");
		return "/request/req-ex01";
	}
}

 

RequestController 에서 매서드의 어노테이션을 보았을때 @RequestMapping("/uri")어노테이션에 등록된 uri들을보면 /request가 공통적으로 들어가있습니다.

 

이때 우리가 클래스 최상단에 @RequestMapping("/request")으로 어노테이션을 하나 선언해주면 각 메서드에서 공통uri인 /request를 제거해도 됩니다.

이것이 공통uri입니다. 모든 메서드의 공통uri를 선행적으로 지정이 되는것입니다

 

공통 uri를 선언하는 방법을 코드로 예시를 보여드리겠습니다.

각 메서드에 선언된 어노테이션의 매핑주소들은 "/request"라는 공통적인 url매핑주소가 등록되어있습니다.

 

해당 uri주소만 추출해서 각 메서드에 공통적으로 적용될수있도록, 클래스 외부에 @RequestMapping어노테이션을 이용하여 등록하겠습니다.

@RequestMapping("/request")
@Controller
public class RequestController {
	
	@RequestMapping("/test") 
	public String testCall() {
		System.out.println("/request/test요청이 들어옴");
		return "test";
	}
	@RequestMapping("/req")
	public String req() {
		System.out.println("/request/req요청이 들어옴!");
		return "/request/req-ex01";
	}
}a

이렇게 선언해주면 공통적인 매핑주소가 지정이 됩니다.

 

728x90
반응형