◈ 빈 자동 등록에 사용할 수 있는 annotation 종류
@Repository
Data Access Layer의 DAO 또는 Repository 클래스에 사용한다.
DataAccessException 자동변환과 같은 AOP의 적용 대상을 선정하기 위해서 사용된다.
@Service
Service Layer의 클래스에 사용한다.
@Controller
Presentation Layer의 MVC Controller에 사용한다.
스프링 웹 서블릿에 의해 웹 요청을 처리하는 컨트롤러 빈으로 선정된다.
@Component
위의 Layer 구분을 적용하기 어려운 일반적인 경우에 설정한다.
빈 자동인식을 위한 annotation 종류가 여러 가지인 이유는
계층별로 빈의 특성이나 종류를 구분하고 AOP Pointcut 표현식을 사용하면 특정 annotation이 달린 클래스만 설정이 가능하다. 그리고 특정 계층의 빈에 부가 기능을 부여할 수 있다.
◈ 스프링 빈 의존 관계 설정
@Resource
Spring 2.5부터 지원
JNDI 리소스와 연관 지어 생각할 수 있고 특정 Bean이 JNDI 리소스에 대한 Injection을 필요로 하는 경우에 사용할 것을 권장한다.
@Autowired
Spring 2.5부터 지원
Spring Framework에서 지원하는 Dependency 정의 용도의 Annotation
스프링 프레임워크에 종속적이긴 하지만 정밀한 DI가 필요한 경우에 유용하다.
@Inject
Spring 3.0부터 지원
@Autowired가 스프링 프레임워크에 종속적이기 때문에
특정 프레임워크에 종속되지 않은 애플리케이션을 구성하기 위해서는 사용할 것을 권장한다.
◈ @Aspect 관련 Annotation
@Aspect Annotation을 이용하여 Aspect Class에 직접 Advice 및 Pointcut 등을 설정할 수 있다.
설정 파일에 <aop:aspectj-autoproxy/> 추가
@Aspect : Aspect Class 선언
@Before("pointcut")
@AfterReturning(pointcut="", returning="")
@AfterThrowing(pointcut="", throwing="")
@After("pointcut")
@Around("pointcut")
◈ @Controller 관련 Annotation
@Controller
클래스 타입에 적용한다.
Contoller class는 Client의 요청을 처리한다.
@RequestMapping
요청 URL mapping 정보를 설정한다.
클래스 타입과 메소드에 설정 가능하다.
Controller method의 HTTP method를 한정할 수 있다.
같은 URL 요청에 대하여 HTTP method에 따라 서로 다른 메소드로 mapping 할 수 있다.
@PathVariable
URL 템플릿 변수에 접근할 때 사용
@RequestParam
HTTP 요청 파라미터를 매핑
@RequestHeader
HTTP 요청 헤더를 매핑
@CookieValue
HTTP 쿠키 매핑
@RequestBody
HTTP 요청의 body 내용에 접근할 때 사용
@ResponseBody
리턴 객체를 HTTP 응답으로 전송한다.
◈ @View 관련 Annotation
@ModelAttribute
model data 처리
RequestMapping 어노테이션이 적용되지 않은 별도 method로 모델이 추가될 객체를 생성
◈ REST 관련 Annotation
@RestController
Controller가 REST방식을 처리하기 위한 것임을 명시한다.
@ResponseBody
JSP 같은 뷰로 전달되는 것이 아니라 데이터 자체를 전달
@PathVariable
URL 경로에 있는 값을 파라미터로 추출한다.
@CrossOrigin
Ajax의 크로스 도메인 문제를 해결한다
@RequestBody
JSON 데이터를 원하는 타입으로 바인딩한다.
'개발 > Spring' 카테고리의 다른 글
[Spring] MyBatis, MyBatis-Spring 특징과 역할 (0) | 2022.05.31 |
---|---|
[Spring] 스프링 부트 (Spring Boot) 특징 및 구조 (0) | 2022.05.18 |
[Spring] 스프링 MVC 아키텍처의 이해 (Spring MVC Architecture) (0) | 2022.05.17 |
[Spring] REST, REST API, RESTful API, OPEN API란? (0) | 2022.05.13 |
[Spring] 스프링 프레임워크 (Spring Framework) (0) | 2022.05.11 |