[Spring] AOP ④ - (예제) HashMap으로 Cache 기능구현
2020. 9. 30. 23:16ㆍ개발공부/Spring
728x90
AOP 시간 마무리로 HashMap을 이용한 Cache 기능 구현을 해보려 합니다. Factorial(팩토리얼) 메서드를 인터페이스에서 implements하여 클래스 두 가지로 나눠 담았습니다.
ProceedingJoinPoint는 Java API JoinPoint Class인데 getArgs() 메서드는 execution 메서드. 즉 공통(횡단) 메서드의 매개변수를 배열로 반환해 줍니다. 메서드 return 값을 반환해주는 proceed() 메서드의 데이터 타입은 Object 이기 때문에 주의해야 합니다.
핵심은 cache 기능을 Map 인터페이스의 HashMap 클래스로 구현하는 부분입니다.
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
|
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import java.util.HashMap;
import java.util.Map;
@Aspect
public class CacheAspect {
private Map<Long, Object> cache = new HashMap<>();
@Around("execution(public * factorial(long))")
public Object execute(ProceedingJoinPoint pjp) throws Throwable{
Long num = (Long)pjp.getArgs()[0]; //객체 배열을 반환. 메서드가 long을 단일 반환하는 타입이었으므로 배열 length는 1
if (cache.containsKey(num)) {
System.out.println("CacheAspect: 이미 구한 숫자입니다.");
cache.get(num);
}
Object result = pjp.proceed();
cache.put(num, result);
System.out.printf("CacheAspect: Cache에 추가[%d]\n", num);
return result;
}
}
|
cs |
'개발공부 > Spring' 카테고리의 다른 글
[Spring] MVC 웹페이지 구현 - Model & 회원가입 페이지 (0) | 2020.10.07 |
---|---|
[Spring] MVC 웹페이지 구현 - Eclipse & xml 설정 (0) | 2020.10.07 |
[Spring] AOP ③ - @Pointcut, @Around... (0) | 2020.09.24 |
[Spring] Interface를 활용한 자동 메서드 실행 ② AOP (0) | 2020.09.24 |
[Spring] Interface를 활용한 자동 메서드 실행 ① (0) | 2020.09.22 |