참조 : SIA 3장

1. Advice를 Java로 작성할 수 있다.
   
    advice를 자바 파일로 구현하고 pointcut을 xml설정에서 정의하고 그 두개를 묶어서 advisor를 역시 또 xml설정에서 만들고 advice가 적용될 target 객체의 proxy역시 ProxyFactoryBean을 xml에 설정 해줘서 만들 수 있습니다.
   
    별도의 언어(AspectJ)를 사용하여 만들면 그 언어의 문법을 배워야 한다는 단점이 있지만 훨씬 다양한 기능을 사용할 수 있다는 장점이 있다.

    2.0에서는 AspectJ의 포인트컷 표현 방법을 모두 사용할 수 있도록 개선 되었습니다.

2. Spring이 관리하는 객체에 대한 Advice는 런타임 때에 이뤄진다.

    프록시 객체가 필요하기 전까지는 프록시 객체를 만들지 않습니다.

    타겟 객체가 어떤 인터페이스를 구현하고 있을 때는 JDK의 Proxy 클래스를 사용하여 프록시 객체를 만들고 그렇치 않은 경우 CGLIB을 사용하여 타겟 객체의 서브 클래스를 만듭니다.

    인터페이스를 통한 프록시 생성이 프록시 클래스 보다 선호된다. 루즐리 커플드니까. 프록시 클래스의 경우 container에 관리되는 bean이 아닌 객체들도 advice가 적용될 수 있지만 이건 예외상황으로 봐야 한다.

    final 메소드는 advice가 적용될 수 없다. 오버라이딩 사용하기 때문에...

3. Spring은 AOP alliance 인터페이스를 구현한다.

    여러 AOP 구현체들 간의 표준화에 동참하는 격이다. AOP alliance의 인터페이스를 구현하면 다른 AOP 구현체 에서도 여기서 만든 advice를 사용할 수 있다.

4. Spring은 메소드 Joinpoint만 제공한다.
   
    다른 AOP 구현체들이 필드 joinpoint를 제공하는데 Spring의 철학으로 그런 방법은 캡슐화를 위반하기 때문에 메소드 joinpoint만 제공합니다.

    못 하는게 아니라 안 한다는거..