5.1 AOP 개념 by ys

중앙 AOP 개념과 용어를 정의하여 시작하겠습니다. 이 용어는 Spring과 관련이 없습니다. 불행히도 AOP 용어는 특히 직관적이지 않습니다. 그러나 Spring이 자체 용어를 사용했다면 더 혼란 스러울 것입니다.

AOP 용어

  • Aspect(애스팩트) : 여러 클래스에 걸쳐 영향을 미치는 모듈화입니다. 트랜잭션 관리는 엔터프라이즈 Java 애플리케이션에서 교차하는 우려의 좋은 예입니다. Spring AOP에서 aspect는 정규 클래스 ( 스키마 기반 접근법 ) 또는 주석으로 주석 된 일반 클래스 @Aspect( @AspectJ 스타일 ) 를 사용하여 구현된다 .

Aspect : AOP의 중심단위. Advice와 Pointcut을 합친것 이다.

=> '비즈니스 로직은 아니지만, 반드시 해야하는 작업', '반드시 해야 하고 공통된 작업' 정도로 해석할 수 있다. (개발에선 이런 행위를 '횡단 관심사(cross-concern)'라고 함) ex) 보안, 성능 모니터링,로그,트랜잭션

  • Join point(결합점) : 메소드 실행이나 예외 처리와 같은 프로그램 실행 중 포인트. Spring AOP에서 join point는 항상 메소드 실행을 나타낸다.

Join point: 인스턴스의 생성시점, 메소드를 호출하는 시점, Exception이 발생하는 시점과 같이 애플리케이션이 실행될 때 특정작업이 실행되는 시점을 의미한다.

  • 조언 (Advice) : 특정 조인 포인트에서 한 측면에 의해 취해진 행동. 다양한 유형의 조언에는 "주변", "이전"및 "이후"조언이 포함됩니다. (조언 유형은 나중에 논의됩니다.) Spring을 포함한 많은 AOP 프레임 워크는 인터셉터로 조언을 모델링하고 조인 포인트 주위에 인터셉터 체인을 유지합니다.

Advice : 교차점에서 지정한 결합점에서 실행되어야하는 코드이다. 실제로 기능을 구현한 객체

  • Pointcut(교차점) : 조인 포인트와 일치하는 술어. Advice는은 pointcut 표현식과 관련이 있으며 pointcut과 일치하는 조인 포인트에서 실행됩니다 (예 : 특정 이름의 메소드 실행). Pointcut 표현식과 일치하는 조인 포인트의 개념은 AOP의 핵심이며, Spring은 기본적으로 AspectJ pointcut 표현식 언어를 사용한다.

Pointcut : 교차점은 결함점들을 선택하고 결합점의 환경정보(context)를 수집하는 프로그램의 구조물이다. Target 클래스와 Advice가 결합(weaving)될 때 둘 사이의 결합규칙을 정의하는 것이다.

여러메소드 들 중 실제 Advice가 적용될 대상 메소드, 여러 Join Point중에서도 Advice를 적용할 대상을 선택하는 정보

  • Introduction : 유형을 대신하여 추가 메소드 또는 필드를 선언합니다. Spring AOP를 사용하면 새로운 인터페이스 (및 해당 구현)를 조언 된 객체에 소개 할 수 있습니다. 예를 들어, 소개를 사용하여 IsModified캐싱을 단순화하기 위해 bean이 인터페이스를 구현하도록 할 수 있습니다 . (Introduction

    는 AspectJ 커뮤니티에서 inter-type 선언으로 알려져있다.)

  • 대상 객체 (Target object) : 하나 이상의 애스펙트에 의해 조언을받는 객체. "조언 대상"이라고도합니다. 런타임 AOP를 사용하여 Spring AOP가 구현되므로이 객체는 항상 프록시 객체입니다.

Target : 충고를 받는 클래스를 대상(Target)라고 한다. 대상은 여러분이 작성한 클래스는 물론, 별도의 니으을 추가하고자 하는 써드파티 클래스가 될 수 있다.

  • AOP 프록시 : 애스펙트 계약을 구현하기 위해 AOP 프레임 워크에 의해 생성 된 객체입니다 (메소드 실행 권고 등). Spring Framework에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시입니다.

Proxy : 대상 객체에 advice가 적용된 후 생성된 객체

  • 위빙 : 다른 응용 프로그램 유형 또는 개체와 측면을 연결하여 권고 된 개체를 만듭니다. 이것은 컴파일 타임 (예 : AspectJ 컴파일러 사용),로드 시간 또는 런타임에 수행 할 수 있습니다. Spring AOP는 다른 순수 자바 AOP 프레임 워크와 마찬가지로 런타임에 위빙을 수행한다.

weaving : 애스팩트를 대상 객체에 제공하여 새로운 프록시 객체를 생성하는 과정을 말한다.

1. 대상: Target

2. 적용할 기능: advice

3. 대상의 어디에서 적용할지 구체적인 명시:pointcut

aspect와 advice의 관계(추상 명사와 구체 명사의 관계)

advice라는 코드를 내가 만듬

로그를 찍는 기능 자체를 aspect라고 한다.

Spring AOP에는 다음과 같은 유형의 advice가 포함됩니다.

  • Before advice : 조인 포인트 이전에 실행되지만 예외를 throw하지 않는 한 실행 흐름이 조인 포인트로 진행하지 못하도록하는 advice

  • After returning advice: 조인 포인트가 정상적으로 완료된 후 실행할 advice (예 : 예외가 발생하지 않고 메서드가 반환되는 경우).

  • throwing advice : 예외를 throw하여 메소드가 종료 될 경우 실행될 advice

  • After (finally) advice : 조인 포인트가 종료되는 방법에 관계없이 실행될 advice (정상 또는 예외적 복귀).

  • around advice : 메소드 호출과 같은 조인 포인트를 둘러싼 advice. 이것은 가장 강력한 advice입니다. around advice는 메소드 호출 전과 후에 사용자 정의 동작을 수행 할 수 있습니다. 또한 조인 포인트로 진행할지 또는 자체 반환 값을 반환하거나 예외를 throw하여 권고 된 메소드 실행을 바로 가기할지 여부를 선택하는 작업도 담당합니다.

around advice는 가장 일반적인 종류의 advice이다. AspectJ와 같은 Spring AOP는 모든 유형의 advice 타입을 제공하기 때문에 필요한 행동을 구현할 수있는 가장 강력한 advice 타입을 사용하는 것이 좋다. 예를 들어 메소드의 반환 값으로 캐시를 업데이트하기 만하면 around advice보다 after returning advice를 구현하는 것이 좋지만 around advice가 동일한 결과를 얻을 수있다. 가장 구체적인 조언 유형을 사용하면 오류 가능성이 적은 간단한 프로그래밍 모델을 제공 할 수 있습니다. 예를 들어, around advice에 사용 된 proceed() 메소드 를 호출 할 필요가 없으므로 호출을 JoinPoint실패 할 수 없다.

Spring 2.0에서는 모든 advice 매개 변수가 정적으로 타입 화되어 Object 배열이 아닌 적절한 유형의 advice 매개 변수 (예를 들어 메소드 실행의 리턴 값의 타입)로 작업한다.

포인트 컷에 의해 조인 된 조인 포인트의 개념은 AOP의 핵심이며, AOP는 인터셉터만을 제공하는 오래된 기술과 구별됩니다. Pointcuts는 객체 지향 계층 구조와 독립적으로 advice를 할 수 있습니다. 예를 들어 선언적 트랜잭션 관리를 제공하는 around advice를 여러 객체에 걸쳐있는 메소드 세트 (예 : 서비스 계층의 모든 비즈니스 오퍼레이션)에 적용 할 수 있습니다.

Last updated