AspectJ를 이용한 AOP 구현 예시입니다.
저의 경우 사용자의 권한 체크 기능을 구현하는데 이용했습니다.
Maven - pom.xml 설정
Maven Repository(https://mvnrepository.com/artifact/org.aspectj/aspectjweaver) 기준 1.9.5 버전이 최신 버전입니다.
...
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
...
Aspect Class
@Aspect
@Componet
public class SampleAspect {
@Pointcut("excution(public * com.package.chavi..*Controller.*(..))")
private void samplePointcut() {}
/* Around must return 'Object(== 처리결과)' */
@Around("samplePointcut()")
public Object sampleAround1(ProceedingJoinPoin joinPoint) throws Throwable {
try {
/* TODO : Logic */
} catch(Throwable t) {
throw new CustomExcption();
}
if(/* TODO : Flag */) {
throw new CustomExcption();
}
return joinPoint.proceed();
}
/* Around must return 'Object(== 처리결과)' */
@Around("samplePointcut()")
public Object sampleAround2(ProceedingJoinPoin joinPoint) throws Throwable {
/* TODO : Logic_1 */
Object data = joinPoint.proceed(); // 호출된 메서드 실행
/* TODO : Logic_2 */
return data;
}
}
@Pointcut : 작성한 관점의 적용 범위를 지정합니다.
표현식 | 의미 |
execution(private * *(..)) | private의 모든 메서드에 적용 |
execution(* set*(..)) | 메서드명이 set*인 모든 메서드에 적용 |
excution(public * com.package.chavi..*Controller.*(..)) | public의 패지키 하위 모든 *Controller들의 메서드에 적용 |
within(com.package.chavi.*) | 패키지의 모든 메서드에 적용 |
within(com.package.chavi..*) | 패키지의 하위 모든 메서드에 적용 |
bean(*) | 모든 빈에 적용 |
execution(* set*(..)) || execution(* get*(..)) |
메서드명이 set*이거나 get*인 모든 메서드에 적용 |
이 외에도 여러 표현식이 있으며, 각 표현식은 &&, ||를 이용해 연결할 수 있습니다.
@Around : 지정된 Pointcut의 실행 전, 후의 동작을 작성할 수 있습니다.
※Around의 경우 무조건 Object 객체를 리턴하여야 합니다. 위경우엔 처리된 Response를 리턴했습니다.
@Before: 지정된 Pointcut의 실행 전의 동작을 작성할 수 있습니다.
@After: 지정된 Pointcut의 실행 후의 동작을 작성할 수 있습니다.
'프로그래밍 > Web.' 카테고리의 다른 글
[JSTL] replace - 개행문자 처리하기 (0) | 2020.03.09 |
---|---|
[Tomcat] it set 'X-Frame-Options' to 'deny'. 오류 해결법 (0) | 2020.02.18 |
[Spring] Apache PDFBox (0) | 2020.02.13 |
[Spring] Maven - 501 Error (0) | 2020.02.10 |
[JavaScript] Cookie (0) | 2020.01.21 |
댓글