- 포인트컷 (Pointcut): "어디에" 적용할 것인지를 결정하는 규칙이다. 클래스나 메서드에 대한 특정 패턴이나 조건을 포함한다.
- 어드바이스 (Advice): "어떻게" 동작할 것인지를 정의하는 로직이다. 실제로 수행되는 작업, 예를 들면 로깅, 트랜잭션 관리, 보안 체크 등이 있다.
- 어드바이저 (Advisor): 포인트컷과 어드바이스를 1대 1 결합한 것이다. 이 두 가지 요소를 결합하여 "어디에 어떻게" 작업을 수행할 것인지를 정의한다.
@Test
@DisplayName("스프링이 제공하는 포인트컷")
void advisorTest3() {
ServiceImpl target = new ServiceImpl();
ProxyFactory proxyFactory = new ProxyFactory(target);
NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut();
pointcut.setMappedNames("save");
DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(pointcut, new TimeAdvice());
proxyFactory.addAdvisors(advisor);
ServiceInterface proxy = (ServiceInterface) proxyFactory.getProxy();
proxy.save();
proxy.find();
}
- ProxyFactory를 사용하면 대상 객체를 프록시로 감싸 여러 개의 Advisor를 적용할 수 있다. 이렇게 하면 각 Advisor의 Advice 로직이 해당 프록시의 메서드 호출에 순차적으로 적용된다.
@Test
@DisplayName("하나의 프록시 여러 어드바이저")
void multiAdvisorTEst2() {
//client -> proxy -> advisor2 -> advisor1 -> target
DefaultPointcutAdvisor advisor1 = new DefaultPointcutAdvisor(Pointcut.TRUE, new Advice1());
DefaultPointcutAdvisor advisor2 = new DefaultPointcutAdvisor(Pointcut.TRUE, new Advice2());
//프록시1 생성
ServiceImpl target = new ServiceImpl();
ProxyFactory proxyFactory1 = new ProxyFactory(target);
proxyFactory1.addAdvisors(advisor2);
proxyFactory1.addAdvisors(advisor1);
ServiceInterface proxy1 = (ServiceInterface) proxyFactory1.getProxy();
proxy1.save();
}
@Slf4j
static class Advice1 implements MethodInterceptor{
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
log.info("advice1 호출");
return invocation.proceed();
}
}
@Slf4j
static class Advice2 implements MethodInterceptor{
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
log.info("advice2 호출");
return invocation.proceed();
}
}
GPT
알겠습니다. 코드를 스스로 생각하고 구현하는 능력과, 다른 사람의 코드나 강의 내용을 이해하고 재현하는 능력은 다르게 평가될 수 있습니다.
강의 내용을 잘 이해하고, 그것을 코드로 재현하는 것 자체도 중요한 능력 중 하나입니다. 그렇지만, 전문가 수준에서는 독립적인 문제 해결 능력, 창의성, 그리고 주어진 지식을 다양한 상황에 적용할 수 있는 능력이 중요하게 작용합니다.
강의 내용을 바탕으로 잘 따라했더라도, 그 내용을 깊이 이해하고, 다른 상황이나 문제에 적용할 수 있는 능력이 필요합니다.
따라서, 냉혹하게 평가한다면, 100점 만점에 70점 정도를 주고 싶습니다. 이는 강의 내용을 잘 이해하고 재현할 수 있는 높은 수준의 능력을 가지고 있지만, 전문가 수준까지 도달하기 위해서는 독립적인 문제 해결 능력과 깊은 통찰력이 추가로 필요하다는 것을 의미합니다.
'Java > 스프링 AOP' 카테고리의 다른 글
빈 후처리기 (2) 스프링 AOP (0) | 2023.08.24 |
---|---|
빈 후처리기 (1) - 빈 가로채기 (0) | 2023.08.22 |
ProxyFactory (1) CGLIB, JDK 동적 프록시 (0) | 2023.08.20 |
CGLIB (0) | 2023.08.19 |
jdk 동적 프록시 (0) | 2023.08.18 |