일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 맛집
- java
- laravel
- elasticsearch
- redis
- it
- db
- springboot
- Spring Boot
- javascript
- jenkins
- Oracle
- AWS
- devops
- JVM
- tool
- IntelliJ
- Git
- php
- Spring
- jsp
- ReactJS
- linux
- MySQL
- Gradle
- ubuntu
- Web Server
- 요리
- Design Patterns
- Spring Batch
Archives
- Today
- Total
아무거나
Annotation 설명 및 실습 본문
반응형
애노테이션(Annotation)
- 정의: 코드 사이에 주석처럼 쓰이면서 특별한 의미, 기능을 수행하도록 하는 기술로 프로그램에게 추가적인 정보를 제공해주는 메타 데이터
- 용도
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공한다.
- 소프트웨어 개발툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
- 런타임 시 특정 기능을 실행하도록 정보를 제공한다. (보통 스프링에선 해당 용도로 많이 쓰인다.)
- 파일정의
@Target({ElementType.[적용대상]}) @Retention(RetentionPolicy.[정보유지되는 대상]) public @interface [어노테이션 이름] { ... }
- 예제
- 애노테이션 생성 [LogExecutionTime.java]
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface LogExecutionTime { }
- @LogExecutionTime 어노테이션을 달아둔 메서드가 실행된 시간을 로그로 남기는 Aspect 파일을 작성 [LogExecutionTimeAspect.java]
import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; import org.springframework.util.StopWatch; @Slf4j @Component @Aspect public class LogExecutionTimeAspect { // LogExecutionTime가 다른 경로에 존재할 때 @annotation 안에 경로를 풀 경로로 안하면 java.lang.IllegalArgumentException: error Type referred to is not an annotation type 에러가 난다 @Around("@annotation(LogExecutionTime)") public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { StopWatch stopWatch = new StopWatch(); stopWatch.start(); Object result = joinPoint.proceed(); stopWatch.stop(); log.info("================ LogExecutionTime: {}", stopWatch.prettyPrint()); return result; } }
- 원하는 메서드에 @LogExecutionTime 어노테이션 적용
@LogExecutionTime @ApiOperation("Annotation TEST API") @GetMapping("examples") public void getCallMethod() throws InterruptedException { ThreadUtil.threadSleep(5); }
- 결과
--------------------------------------------- ns % Task name --------------------------------------------- 082840000 100%
- 애노테이션 생성 [LogExecutionTime.java]
반응형
'Java & Kotlin > Java' 카테고리의 다른 글
JDBC 동작과정 (0) | 2022.01.07 |
---|---|
Error: no Creators, like default construct, exist... (0) | 2021.06.29 |
리플렉션(Reflection) 이란? (0) | 2021.05.03 |
Java에서 Apache OpenOffice + JODConverter 를 활용한 PDF Converter 개발 (2) | 2020.06.17 |
파일복사 (0) | 2020.06.06 |
Comments