여러 객체에 공통으로 적용되는 기능 (공통 기능)
어드바이스 + 포인트컷을 모듈화하여 애플리케이션에 포함되는 횡단 기능이다.
여러 어드바이스와 포인트컷이 함께 존재한다.
클래스 초기화, 객체 인스턴스화, 메소드 호출, 필드 접근, 예외 발생과 같은 애플리케이션 실행 흐름에서의 특정 포인트를 의미한다.
애플리케이션에 새로운 동작을 추가하기 위해 조인포인트에 관심 코드(aspect code)
를 추가할 수 있다.
횡단 관심은 조인포인트 전/후에 AOP에 의해 자동으로 추가된다.
추상적인 개념이고 AOP를 적용할 수 있는 모든 지점이라 생각하면 된다.
스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메서드 실행 지점으로 제한된다.
어드바이스 적용이 필요한 곳은 애플리케이션 내에 메서드를 갖는다.
조인포인트에서 수행되는 코드를 의미한다.
Aspect를 언제 핵심 코드에 적용할 지를 정의한다.
시스템 전체 애스펙트에 API 호출을 제공한다.
메서드를 호출하기 전에 각 상세 정보와 모든 메서드를 로그로 남기기 위해 메서드 시작 전의 포인트인 조인포인트 를 선택한다.
부가 기능에 해당된다.
조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능이다.
AspectJ 표현식을 사용해서 지정한다.
프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별 가능하다.
포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것이다.
AOP 적용을 위해 애스펙트 객체에 연결한 상태다.
컴파일 타임(AspectJ compoiler)
.java
=> .class
변환 될 때
로드 타임
런타임, 스프링 AOP는 런타임, 프록시 방식이다.
AOP 기능을 구현하기 위해 만든 프록시 객체
스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시다.
스프링 컨테이너가 객체를 생성할 때 Proxy 객체를 자동으로 생성하고 원본 객체 대신 프록시를 빈으로 등록한다.
A는 B에 의존하는 관계
A -> B (Proxy) -> B
핵심 기능을 담고 있는 모듈로 타겟은 부가기능을 부여할 대상이 된다.
Adivce를 받는 객체이고 포인트컷으로 결정된다.
하나의 어드바이스와 하나의 포인트 컷으로 구성된다.
스프링 AOP에서만 사용되는 특별한 용어다.