English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SpringBoot AOP

이 애플리케이션은 일반적으로 다중 레이어 개발입니다. 표준 Java 애플리케이션은 다음과 같은 레이어를 가집니다:

웹 레이어: REST나 웹 애플리케이션을 통해 공개합니다.서비스. 비즈니스 레이어: 이는 애플리케이션의비즈니스 로직. 데이터 레이어: 이는 애플리케이션의持久성 로직.

각 레이어의 책임은 다르지만 모든 레이어에 적용되는 일반적인 어셋은 로그 기록, 보안, 검증, 캐시 등으로 불립니다.이러한 일반적인 어셋은 다양한 분야의 주의사항.

이러한 주의사항을 각 레이어에서 별도로 구현하면 코드가 유지보수가 더 어려워집니다. 이 문제를 극복하기 위해 어셋 방향 프로그래밍(AOP)이 다양한 분야의 문제를 해결하는 솔루션을 제공합니다.

다양한 분야의 주의사항을 어셋으로 간주합니다. 포인트컷을 정의하여 어哪里에 어셋을 적용해야 하는지 지시합니다.

그것은 다양한 분야의 주의사항이 하나의 내聚적인 코드 컴포넌트에서 정의되도록 보장합니다.

AOP

AOP (Aspect-지향성 프로그래밍)허용함으로써 Across-cutting Interest Point모듈화된 프로그래밍 패턴을 높이기 위해 분리됩니다. 이러한 다양한 부서의 주의사항은 주요 비즈니스 로직과 다릅니다. 코드 자체를 수정하지 않고도 기존 코드에 다른 행동을 추가할 수 있습니다.

Spring의 AOP 프레임워크는 이러한 다양한 분야의 주의사항을 구현하는 데 도움을 줍니다.

AOP를 사용하면 한 곳에서. 이 기능을 적용하는 방식과 위치를 자유롭게 정의할 수 있으며, 새로운 기능을 추가하는 클래스를 수정하지 않아도 됩니다. 이제, 특수한 클래스로 모듈화된 cross-cutting interest point를 추가할 수 있습니다. Aspect.

Aspect는 장점:

첫 번째로, 각 관심사의 로직은 이제 하나의 지점에 집중되어 있으며, 전체 코드 라이브러리에서 분산되어 있지 않습니다. 두 번째로, 비즈니스 모듈은 주요 관심사의 코드만 포함합니다. 부수적인 관심사는Aspect.

각 Aspect는 실행해야 할 책임을 가진 Advice우리는 하나나 여러 개의 점에서 Aspect의 기능을 프로그램에 구현할 수 있습니다.

AOP의 장점

순수 Java로 구현되었습니다. 특별한 컴파일 과정이 필요하지 않습니다. 메서드 실행 점만 지원. runtime weaving만 제공. AOP Proxy는 두 가지 유형이 있습니다: JDK 동적 프록시 CGLIB Proxy.

Across-cutting Interest Point

한应用程序의 여러 위치에서 구현해야 할 주요 관심사.

AOP 테르미널

Aspect: Aspect는 AOP 테르미널을 포함하는 모듈입니다.advicepointcuts을 제공하고,cross-cutting여러 가지 Aspect가 있을 수 있습니다. 우리는 @Aspect annotated regular class를 사용하여 Aspect를 구현할 수 있습니다. Pointcut: 切入点는 Advice를 실행하는 하나나 여러 개의 점을 선택하는 표현식입니다. 우리는expressions또는patterns切入点는 점을 정의하는 다른 유형의 표현어를 사용합니다. Spring Framework에서는 AspectJ 切入点 표현어. Join point: Join point는 응용 프로그램에서 Advice를 적용하는 위치. AOP 측면점.메서드 실행, 예외 처리, 객체 변수 값 변경의 점.등을 사용합니다. Advice: Advice는 우리가 메서드 실행 전에before또는after취할 조치.다섯타입의 Advice: Advicebefore, after, after-returning, after-throwing과around advice는 특정join point의 Advice. 이 섹션에서는 이 Advice에 대해 더 자세히 논의할 것입니다. Target object: Advice를 적용한 객체는target object목표 객체는 항상proxied이것은 실행 중에 목표 메서드를 덮어쓰는 서브클래스를 생성하고, Advice를 포함하도록 설정한다는 것을 의미합니다. Weaving: 이는 각 면에서 다른 응용 프로그램 유형과 연결하는 것입니다.linking aspects의 과정입니다. 우리는runtime, load time컴파일 시간weaving.

Proxy: 이는 Advice가 대상 객체에 적용된 후 생성된 객체로서, Proxy라고 합니다. proxy . Spring AOP는 JDK 동적 프록시, 대상 클래스와 Advice를 사용하여 프록시 클래스를 생성합니다. 이는 AOP 프록시 클래스라고 합니다.

AOP와 OOP

AOP와 OOP 간의 차이점은 다음과 같습니다:

AOP OOP
Aspect: 접속점, Advice, 속성을 포함하는 코드 단위를 포장합니다.Class: 메서드와 속성을 포함하는 코드 단위를 포장합니다.
Pointcut: 그것은 Advice를 실행하는 진입점 집합을 정의합니다.Method signature: . 그것은 메서드 주체를 실행하는 진입점을 정의합니다.
Advice: 이는 각 분야의 주요 관심사를 구현합니다.Method bodies: 비즈니스 로직 문제의 구현입니다.
Waver: Advice를 사용하여 코드를 구성합니다(소스 또는 객체). Compiler: 소스 코드를 타겟 코드로 변환합니다.

Spring AOP와 AspectJ

AOP와 OOP 간의 차이점은 다음과 같습니다:

Spring AOP AspectJ
독립적인 컴파일 과정이 필요합니다.AspectJ 컴파일러가 필요합니다.
그것은 메서드 실행 점切的를 지원합니다.그것은 모든 점切的를 지원합니다.
그것은 Spring Container가 관리하는 bean에서 구현할 수 있습니다.그것은 모든 도메인 객체에서 구현할 수 있습니다.
그것은 메서드 수준의编织를 지원합니다.그것은 필드, 메서드, 생성자, 스태틱 초기화자, 최종 클래스 등을 변동시킬 수 있습니다.

AOP Advice의 유형

AOP Advice는 다음과 같은 다섯 가지 유형이 있습니다:

Before Advice After Advice Around Advice After Throwing After Returning

Before Advice: 접속점 전에 실행되는 Advice는 notification 전에 호출됩니다. 우리는 @Before Annotate Advice as Before notification.

After Advice: 접속점 후에 실행되는 Advice는 after notification라고 불립니다. 우리는 @After Annotate Advice as After notification.

Around Advice: 접속점 전과 후에 실행되는 Advice는

After Throwing: 접속점에서 예외가 발생할 때 실행되는 Advice.

After Returning: 메서드가 성공적으로 실행될 때 실행되는 Advice.

AOP를 구현하기 전에 pom.xml 파일에 추가해야 합니다. Spring AOP 의존 관계.

Spring Boot Starter AOP

Spring Boot Starter AOP는 Spring AOP와 AspectJ의 의존 관계를 제공합니다. AOP는 기본적인 AOP 기능을 제공하며, AspectJ는 완전한 AOP 프레임워크를 제공합니다.

<의존 관계>
<그룹 아이디>org.springframework.boot</그룹 아이디>
<아티펙트 아이디>spring-boot-스타터-aop</아티펙트 아이디>
<버전>2.2.2.RELEASE</버전>
</의존 관계>

다음 장에서는应用程序에서 다양한 Advice를 구현할 것입니다.