#Spring - 7. Aspect Oriented Programming with Spring
본문 바로가기
Programming/Spring

#Spring - 7. Aspect Oriented Programming with Spring

by 권가 2019. 6. 14.

1. Logging: naive approach

여러 클래스에 걸쳐 있는 Concerns를 모듈화하는 방법

naive approach의 단점

비즈니스 로직과 로깅 기능 혼합
- 우려 분리 원칙을 위반.
- 복잡성 및 상호 의존성 증가.
- 느슨하게 결합된 설계 방지.

코드 반복 포함
- 변경하기 어려움

 

2. Spring AOP

AOP는 아래와 같은 프로그래밍 패러다임.
(지원 기능을 main 프로그램의 비즈니스 논리와 분리하다.)

AOP-Weaving

3. AOP Definition

 

Aspect
- 여러 클래스에 걸쳐 중단되는 엔터프라이즈 애플리케이션 문제를 구현하는 클래스
- 포인트컷과 조언의 조합 
- 예: 로깅, 프로파일링, 보안, 트랜잭션
Join point
- 애플리케이션에서 AOP 측면을 연결할 수 있는 지점
Advice
- 방법 실행 전 또는 후에 수행할 실제 작업

Pointcut

- 조언을 실행해야 하는 결합점 집합 
- 식 또는 패턴을 사용하여 점 자르기 지정

 

Advice Types

 

Advice

Description

before

method를 실행하기 전에 a  dvice 실행

after

결과에 관계없이 method 실행 후 advice 실행

after-retuning

method가 성공적으로 완료된 경우에만 method 실행 후 advice 실행

after-throwing

execution으로 method가 종료된 경우에만 method 실행 후 advice 실행.

around

method 호출하기 전과 후에 권장 사항 실행

Pointcut expression Pattern

 

4. Aspects Implementation

4-1. AOP 기반의 XML 스키마 
Aspect = 일반 Java 클래스 + XML 구성(config)

4-2. AOP 기반의 @AspectJ

Aspect = 일반 Java 클래스 + annotation

 

POM.XML(Maven Proejct)에 라이브러리 추가

XML에 새로운 NameSpace 사용

4-1. AOP 기반의 XML 스키마

Implementing aspect

Declaring an aspect

Declaring a pointcut

Declaring advices

 

4-2. AOP 기반의 @AspectJ

@AspectJ 사용하려면 <aop:aspectj-autoproxy></aop:aspectj-autoproxy> 포함

Declaring an aspect

Declaring a pointcut

Declaring advices

 

정리.

AOP의 주요 구성 요소 
- aspect, point cut, join point, advice

- AOP를 사용하면 여러 클래스에 영향을 미치는 기능을 재사용 가능한 모듈(즉, 측면)로 캡슐화할 수 있음

AOP의 장점
- 관심 분리를 촉진
- 코드 재사용 및 모듈화 촉진
- 느슨하게 결합된 설계 추진

댓글