반응형
서론
이전 글 https://hjh0827.tistory.com/88 에서 프로젝트에서 호출하는 api의 controller 메소드명을 DB에 저장해달라는 요건을 받고 처리하려고 하였는데 모든 메소드에 쓰는건 비효율적이라 다른 방법을 정리한다.
Maven Dependencies
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
pom.xml에 추가한다.
소스
package com.example.demo.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class ControllerAspect {
// 모든 controller를 intercept
@Around("execution(* com.example.demo.controller..*Controller.*(..))")
public Object controllerAround(ProceedingJoinPoint joinPoint) {
Object[] args = joinPoint.getArgs();
String methodName = joinPoint.getSignature().getName();
for( Object arg : args ) {
// dto에 extends 한 정보 확인(baseEntiry는 공통 정보)
// if ( arg instanceof BaseEntity ) {
// BaseEntity dto = (BaseEntity) arg;
// if ( dto != null ) {
// if("".equals(dto.getRegPrmId())) dto.setRegPgmId(methodName);
// }
// }
}
return methodName;
}
}
ProceedingJoinPoint 인터페이스의 제공 메서드
메서드 | 설명 |
Signature getSignature() | 호출되는 메서드에 대한 정보를 구한다. |
Object getTarget() | 대상 객체를 구한다. |
Object[] getArgs() | 파라미터의 목록을 구한다. |
org.aspectj.lang.Signature 인터페이스는 호출되는 메서드와 관련된 정보를 제공하며 다음과 같은 메서드를 정의하고 잇다.
메서드 | 설명 |
String getName | 메서드의 이름을 구한다. |
String toLongString() | 메서드를 완전하게 표현한 문장을 구한다. (메서드의 리턴 타입, 파라미터 타입이 모두 표시된다.) |
String toShortString() | 메서드를 축약해서 표현한 문장을 구한다. (기본 구현은 메서드의 이름만을 구한다. |
반응형
'개발 > JAVA' 카테고리의 다른 글
[JAVA] Swagger 설정 및 오류 해결 (0) | 2023.02.27 |
---|---|
Spring Boot 파일 용량 설정 (0) | 2023.02.22 |
[JAVA] 현재 메소드 명(method name) 가져오기 (0) | 2023.02.17 |
[JAVA] 이클립스 lombok(롬복) 설치 (0) | 2022.08.02 |
[JAVA] 이클립스 port 변경 방법 (0) | 2022.07.31 |