반응형

AOP with Spring Framework




(원문 위치 : http://www.tutorialspoint.com/spring/aop_with_spring.htm )

Spring framework의 key component중 하나는 AOP(Aspect oriented programming) framework다. AOP는 분해된(breaking down) 프로그램 로직을 concern이라 불리는 구분된 부분으로 지정한다. 프로그램의 여러부분에 걸친 함수는 cross-cutting concern으로 불리고 이 cross-cutting concern은 개념적으로 프로그램의 비즈니스 로직과 분리된다. logging, auditing, declarative transaction, security, catching 등과 같은 aspect의 보편적이고 다양한 예가 있다.

OOP에서 모듈화의 key는 class이다. 반면 AOP에서 모듈화의 단위는 aspect이다. DI는 각각의 프록램 객체가 분리(decouple)되는 것을 돕고 AOP는 영향을 미치는 객체로부터 cross-cutting concern을 분리하는 것을 돕니다. AOP는 Perl, DotNet, Java 등과 같은 프로그래밍 언어에서 trigger와 같다.

Spring AOP 모듈은 프로그램을 가로채기 위한 interceptor를 제공한다. 예를 들면, 함수가 실행되어 질때, 함수 실행 전 혹은 후에 추가적인 기능을 추가할 수 있다.

AOP Terminologies:

AOP로 작업하기 전에 AOP개념과 용어에 친숙해 지자. 이들 용어는 Spring에 특정되기보다는 오히려 AOP와 같련된다.
TermsDescription
Aspect

Cross-cutting 요구를 제공하는 API set을 갖는 모듈. 예를 들면, logging 모듈은 logging을 위해 AOP aspect로 불려질 수 있다. 프로그램은 요구에 따라 다수의 aspect를 가질 수 있다.

Join point

AOP aspect에서 plug-in할 수 있는 프로그램에 지점(point)를 나타낸다. 이것은 Spring AOP framework를 사용하여 action이 취해질 수 있는 프로그램내의 실제 공간으로 말할 수 있다.

Advice

함수 실행 이전 혹은 이후에 취해지는 실제 action이다. Spring AOP framework에 의한 프로그램 실행동안 호출되는 실제 코드이다.

Pointcut

Advice가 실행되어지는 하나 또는 그 이상의 jointpoint set이다. 이후 AOP예제에서 보게 될 것과 같이 pointcut을 표현(expression)과 패턴으로 나타낼 수 있다.

Introduction

class에 새로운 함수 또는 속성(attribute)을 추가할 수 있게 한다.

Target object

하나 또는 그이상의 aspect에 의해 advice되고 있는 객체. 이 객체는 항상 proxy 개체가 될 것이다. 또한 advise되어진 객체로써 참조되어 진다.

Weaving

Weaving은 advice되어진 객체를 생성하기 위한 다른 프로그램 타입 혹은 객체와 aspect를 연결하는 절차이다. 이것은 complie시, load시, runtime시 행해질 수 있다.


Types of Advice

Spring aspect는 아래 언급된 다섯가지로 작동할 수 있다.
AdviceDescription
before

함수 실행전 advice를 실행

after

함수가 종료(outcome)되지 않는한 함수 실행전 advice를 실행

after-returning

함수가 성공적으로 완료되면 함수 실행 후 advice 실행

after-throwing

함수가 exception 발생으로 종료되면 함수 실행 후 advice 실행

around

호출된 advice된 함수 전/후에 advice 실행


Custom Aspects Implementation

Spring은 custom aspect 구현을 위해 @AspectJ annotation 접근(approach)과 schema 기반 접근을 지원한다. 이 두가지 접근은 이후 강좌에서 자세히 설명할 것이다.
ApproachDescription
XML Schema based

XML 기반 설정을 따르는 일반(regular)적인 class를 사용하여 aspect가 구현됨.

@AspectJ based

@AspectJ refers to a style of declaring aspects as regular Java classes annotated with Java 5 annotations.
@AspectJ는 Java 5 annotation으로 일반(regular) class에 annotate(주석을 달다라는 뜻이지만, 선언한다가 더 어울릴듯 싶다.)함으로써 aspect를 선언하는 형태를 참조한다.(...말 참 어렵다..ㅠ.ㅠ)



반응형

+ Recent posts