Section 1.  Spring AOP (XML) 
1. Spring AOP  

3. Around Advice 구현   
- MethodInterceptor 인터페이스 구현 (= 프록시 핸들러)
 
- invoke() 메서드를 오버라이딩 해야함
 
- proceed() 메서드를 이용하여 실제 객체의 메서드 호출 (= method.invoke)
 

4. Before Advice 구현   
- MethodBeforeAdvice 인터페이스 구현 ( = 프록시 핸들러)
 
- before() 메서드를 오버라이딩 해야함
 
- 실제 객체의 메서드를 호출할 필요 없음
 

5. After Returning Advice 구현   
- AfterReturningAdvice 인터페이스 구현 ( = 프록시 핸들러)
 
- afterReturning() 메서드를 오버라이딩 해야함
- Object returnValue - 메서드의 반환값
- Method method - 실제 호출되는 메서드
- Object[] args - 실제 호출되는 메서드의 인자값(들)
- Object target - 실제 객체
 

6. After Throwing Advice 구현   
- ThrowsAdvice 인터페이스 구현 ( = 프록시 핸들러)
 
- 오버라이딩할 메서드 X -> 수 많은 예외가 발생할 수 있으므로 특정한 것을 지정할 수 없음
 

7.  XML 설정 

    ① Target - 실제 객체
    ② MethodInterceptor - 부가 기능을 수행할 핸들러
    ③ Proxy - 부가 기능을 수행하고 실제 객체의 메서드를 호출
- proxy 객체에 setTarget() 메서드를 이용하여 실제 객체 매핑
 
- proxy 객체에 setInterceptorNames() 를 이용하여 핸들러 매핑
- list 태그는 참조(ref) 목록이므로 value로 지정하면 해당 id 값을 갖는 객체를 참조(ref)
 
- list 참조 목록에서 Before / Around 중에 상단에 있는 핸들러를 먼저 수행
 
- AfterReturning 이 Around 아래에 존재하면 실제 객체의 메서드가 반환된 후 수행되고, 위에 존재하면 Around Advice의 invoke 메서드가 반환된 후 수행됨
 
8.  Main 부분 
- XML 설정 파일에서 proxy 부분을 변경하면서 Spring AOP / DI 구현
 

