조인 포인트는 추상적인 개념이고, AOP를 적용할 수 있는 지점을 의미합니다.
어드바이스가 적용될 수 있는 위치, 메소드 실행, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 지점을 나타냅니다.
AspectJ를 사용해서 컴파일 시점과 클래스 로딩 시점에 적용하는 AOP는 바이트코드를 실제 조작하기 때문에 해당 기능을 모든 지점에 다 적용할 수 있습니다.
프록시 방식을 사용하는 스프링 AOP는 메서드 실행 지점에만 AOP를 적용할 수 있습니다.
프록시는 메서드 오버라이딩 개념으로 동작합니다.
생성자나 static 메서드, 필드 값 접근에는 프록시 개념이 적용될 수 없습니다.
프록시를 사용하는 스프링 AOP의 조인 포인트는 메서드 실행으로 제한됩니다.
프록시 방식을 사용하는 스프링 AOP는 스프링 컨테이너가 관리할 수 있는 스프링 빈에만 AOP를 적용할수 있습니다.
JoinPoint 메소드는 어드바이스의 종류에 따라 사용방법이 다소 다르지만 기본적으로 어드바이스 메소드에 매개변수로 선언만 하면 됩니다.
JoinPoint.getArgs() : JoinPoint에 전달된 인자를 배열로 반환합니다.
JoinPoint.getThis() : AOP 프록시 객체를 반환합니다.
JoinPoint.getSignature() : 조언되는 메서드에 대한 설명을 반환합니다.
JoinPoint.toString() : 조언되는 방법에 대한 유용한 설명을 인쇄합니다.