728x90
Custom Annotation 만들기 - AOP(Aspect-Oriented Programming)
이전에 작성했던 포스트에 이어서 커스텀 어노테이션을 만드는 방법 중에서 AOP를 이용해서 커스텀 어노테이션을 만들어보자.
1. AOP를 이용한 방법
Spring AOP를 사용해서 어노테이션을 처리하는 로직을 분리한다. 이 방법은 비즈니스 로직과 어노테이션 처리 로직을 분리하여 유지보수가 쉽고, 코드가 깔끔해진다.
특히 Spring 프레임워크에서 많이 사용되며, @Transactional, @Cacheable 등이 이러한 방식으로 구현되어 있다.
@Aspect
public class MyCustomAspect {
@Around("@annotation(MyCustomAnnotation)")
public Object handle(ProceedingJoinPoint joinPoint) throws Throwable {
// 어노테이션 처리 로직
return joinPoint.proceed();
}
}
2. 실습 코드
2-1. 커스텀 어노테이션 생성
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyCustomAnnotation {
String value() default "";
}
2-2. AOP를 이용해 이 어노테이션을 처리할 ‘MyCustomAspect’ class 작성
@Aspect
@Component
public class MyCustomAspect {
@Around("@annotation(myCustomAnnotation)")
public Object handle(ProceedingJoinPoint joinPoint, MyCustomAnnotation myCustomAnnotation) throws Throwable {
System.out.println("Before method execution: " + myCustomAnnotation.value());
Object result = joinPoint.proceed();
System.out.println("After method execution: " + myCustomAnnotation.value());
return result;
}
}
2-3. 마지막으로 MyCustomAnnotation 어노테이션을 을 실제로 사용할 service class
@Service
public class MyService {
@MyCustomAnnotation(value = "Doing something")
public void doSomething() {
System.out.println("Inside the method.");
}
}
2-4. 실제 출력 예시
MyService의 doSomething 메서드가 실행될 때, MyCustomAspect의 handle 메서드도 함께 동작하기 때문에, 최종적으로 콘솔에 출력되는 문구는 다음 순서로 나타난다.
Before method execution: Doing something
Inside the method.
After method execution: Doing something
- "Before method execution: Doing something": AOP의 @Around 어노테이션에 의해 메서드 실행 전에 출력된다.
- "Inside the method.": 실제 doSomething 메서드의 로직이 실행되면서 출력된다.
- "After method execution: Doing something": 메서드 실행 후에 출력된다.
이러한 순서로 로그가 출력되게 된다.
3. 마무리
Spring의 AOP를 활용한 커스텀 어노테이션을 생성하는 방법을 알아봤다.
이런 식으로 AOP와 커스텀 어노테이션을 결합하면, 비즈니스 로직과 어노테이션을 처리하는 로직을 분리할 수 있어 코드의 가독성과 유지보수성이 향상된다.
각자 개발 방향과 로직의 프로세스에 따라서 커스텀 어노테이션을 작성하는 방법을 적절하게 골라서 사용해 주면 좋을 것 같다.
[Spring Boot] Custom Annotation 만들기 - 메타 어노테이션
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring Batch 코드 작성 후 실행 시 Table doesn't exist 에러 해결 (0) | 2023.11.07 |
---|---|
[Spring Boot] 의존성 버전문제로 인한 오류 해결 (1) | 2023.11.07 |
[Spring Boot] RequestDTO로 요청받을때 @RequestBody를 작성하는 경우와 작성하지 않는 경우 (1) | 2023.11.07 |
이해하기 쉬운 CORS 및 API 개발 안내서 (Access-Control-Allow-Headers) (1) | 2023.11.05 |
[Spring Boot] Custom Annotation 만들기 - 메타 어노테이션 (2) | 2023.10.23 |