Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Advisor - 예제 본문

인프런/[인프런] 스프링 핵심 원리 - 고급

Advisor - 예제

Seung__ 2021. 12. 31. 13:48

어드바이저는 하나의 포인트컷과 하나의 어드바이스를 가지고 있다.
프록시 팩토리를 통해 프록시를 생성할 때 어드바이저를 제공하면 어디에 어떤 기능을 제공할 지 알 수
있다.

 

1. 예제코드


public class AdvisorTest {

    @Test
    void advisorTest1(){
        ServiceInterface target = new ServiceImpl();
        ProxyFactory proxyFactory = new ProxyFactory(target);

        DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(Pointcut.TRUE, new TimeAdvice());
        proxyFactory.addAdvisor(advisor);
        ServiceInterface proxy = (ServiceInterface) proxyFactory.getProxy();
       
        proxy.save();
        proxy.find();
    }

}
  • new DefaultPointcutAdvisor
    • Advisor 인터페이스의 가장 일반적인 구현체이다.
    • 생성자를 통해 하나의 포인트컷과 하나의 어드바이스를 넣어주면 된다. 
    • 어드바이저는 하나의 포인트컷과 하나의 어드바이스로 구성된다.
  • Pointcut.TRUE
    • 항상 true 를 반환하는 포인트컷이다. 
    • 이후에 직접 포인트컷을 구현해볼 것이다.
  • new TimeAdvice()
    • 앞서 개발한 TimeAdvice 어드바이스를 제공한다.
  • proxyFactory.addAdvisor(advisor)
    • 프록시 팩토리에 적용할 어드바이저를 지정한다.
    • 어드바이저는 내부에 포인트컷과 어드바이스를 모두 가지고 있다. 
    • 따라서 어디에 어떤 부가 기능을 적용해야 할지 어드바이스 하나로 알 수 있다. 
    • 프록시 팩토리를 사용할 때 어드바이저는 필수이다.
  • 그런데 생각해보면 이전에 분명히 proxyFactory.addAdvice(new TimeAdvice()) 이렇게 어드바이저가 아니라 
  • 어드바이스를 바로 적용했다. 
  • 이것은 단순히 편의 메서드이고 결과적으로 해당 메서드 내부에서 지금 코드와 똑같은 어드바이저가 생성된다.
  • DefaultPointcutAdvisor(Pointcut.TRUE, new TimeAdvice())

 

 

2. 어드바이저 관계


 

 

 

3. GitHub : 211231 Pointcut, Advice, Advisor


 

GitHub - bsh6463/Spring_Advanced_2

Contribute to bsh6463/Spring_Advanced_2 development by creating an account on GitHub.

github.com

 

Comments