공부하는 블로그

Spring | Annotations 본문

Spring

Spring | Annotations

치킨닮은닭 2020. 9. 29. 14:44

Annotation ?

 어노테이션(Annotation)은 JDK 5부터 추가된 문법 요소로 @를 이용하여 클래스, 메서드, 변수에 달리는 주석을 의미한다. 이러한 어노테이션은 프로젝트의 컴파일이나 런타임에 해석되는 메타 데이터라고 할 수 있다.

 

Annotation 종류

Bean 관련

 초기 스프링 개발에서 빈 생성은 xml 설정파일을 통해 가능했으나 현재는 자바 클래스에서 간단한 어노테이션으로 빈을 등록할 수 있다. 스프링의 빈은 싱글턴(Singleton)으로 만들어져 스프링 컨테이너에서 관리된다.

 

@Configuration & @Bean

 자바 클래스 선언부 위에 붙여 설정 클래스임을 스프링 컨테이너에게 알린다. 해당 클래스 내에 특정 타입을 리턴하는 메서드에 @Bean을 붙여주면 자동으로 해당 타입의 빈 객체가 생성된다. @Bean(name="name")으로 빈 이름을 지정해줄 수 있다.

 

@Component

 클래스의 선언부 위에 붙여 스프링에서 사용자 클래스를 스프링 빈으로 등록한다.

 

@Controller, @Service, @Repository

 @Component를 각각의 MVC 모델의 용도에 맞게 구체화 시킨 것으로 해당 클래스가 Conroller/Service/Repository로 사용됨을 스프링 컨테이너에게 알린다.

 

@RestController

 @Contoller + @ResponseBody를 합친 어노테이션으로 메소드의 리턴 객체를 JSON 형태로 반환한다. REST API를 개발할 때 사용한다.

 

DI 관련

@Required

 클래스 내의 필수 프로퍼티를 명시할 때 사용된다. 필수 프로퍼티의 Setter 메서드 선언부 위에 붙여 사용한다.

 

@Autowired

 스프링 컨테이너에 등록된 빈을 리턴 타입에 따라 주입하여 객체를 자동으로 생성해준다. 해당 타입을 반환하는 빈이 없으면 이름으로 매칭한다.

 

@Qualifier("bean_name")

 @Autowired와 함께 사용되는 어노테이션으로, 같은 return type을 가진 빈이 두 개 이상 존재하게 되면 @Qualifier로 어떤 빈을 주입할지 지정해준다.

 

@Resource

 빈의 이름을 기준으로 객체를 주입한다. 해당 이름을 가진 빈이 없으면 타입으로 매칭한다. 

 

@PropertySource

 클래스에서 참조할 프로퍼티 파일을 불러온다. @PropertySource("classpath:package/xxx.properties")와 같은 형식으로 사용한다.

 

@Value

 

 

Parameter 관련

@RequestParam

 HTTP GET 요청의 query에 매칭되는 파라미터 값을 가져오는 어노테이션이다. 다음과 같은 형식으로 사용된다.

// Controller
@GetMapping("/home")
public String home(@RequestParam("name") String name) {
    /*
    	LOGIC
    */
}

// http://domain/home?name=kim 과 같은 요청 시 파라미터를 name 변수에 자동으로 담아준다.

@PathVariable

 HTTP 요청 시 path에 매칭되는 파라미터 값을 가져오는 어노테이션이다. 다음과 같은 형식으로 사용된다.

// Controller
@GetMapping("/home/{name}")
public String home(@PathVariable("name") String name) {
    /*
    	LOGIC
    */
}

// http://domain/home/kim 과 같은 요청 시 path에 담긴 파라미터를 name 변수에 자동으로 담아준다.

@RequestBody

 HTTP POST 요청에서 Body에 담긴 데이터를 가져오는 어노테이션이다. 해당 데이터를 바로 DTO 클래스로 매핑이 가능하다.

 

@ResponseBody

 REST 방식의 메서드 구현을 위한 어노테이션으로 리턴 객체를 JSON 형식으로 반환한다.

 

Lombok 관련

@Getter, @Setter, @ToString, @AllArgsConstructor

 DTO/VO 클래스 선언부 위에 붙여 자동으로 getter, setter, toString, constructor를 생성해준다.

 

AOP 관련

@EnableAspectJAutoProxy

@Aspect

@PointCut

@Before

@After

@Around

@AfterReturning

@AfterThrowing

 

Cache 관련

@EnableCaching

@Cacheable

@CacheEvict

@CachePut


Reference

- Spring Annotation의 종류와 그 역할 : gmlwjd9405.github.io/2018/12/02/spring-annotation-types.html

- Bean 객체를 등록하는 두 가지 방법 : cbw1030.tistory.com/54

'Spring' 카테고리의 다른 글

Spring | MockServer  (0) 2023.09.24
Spring | @TransactionalEventListener  (0) 2023.09.17
Spring | Application Event  (0) 2023.09.10
Spring | BDD - Given / When / Then  (0) 2023.09.03
Spring | Mockito Unit Test  (0) 2023.08.27
Comments