개발/Spring

[Spring] 스프링에서 많이 사용하는 어노테이션 정리 (Annotation)

zz132456zz 2022. 5. 16. 22:24
728x90

◈ 빈 자동 등록에 사용할 수 있는 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 데이터를 원하는 타입으로 바인딩한다.

 

 

 

 

 

 

 

 

 

 

728x90