일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- url parsing
- BFS
- Spring Boot
- 탐욕법
- 완전탐색
- 백준알고리즘
- 백준
- 동적프로그래밍
- 리액트
- java
- 자료구조
- 라우터
- spring
- 브루트포스
- Algorithm
- AWS
- 토이프로젝트
- ELB
- 알고리즘
- mysql
- 서버구축
- 다익스트라 알고리즘
- EC2
- EventListener
- Router
- sort
- 정렬
- nodejs
- 스터디
- react
- Today
- Total
공부하는 블로그
Spring | Annotations 본문
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 |