Spring Aspect Orientated Programming(AOP)

업데이트:

Aspect Orientated Programming(AOP)1

횡단 관심사(공통된 코드)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다.

특징

  • Spring은 프록시 패턴을 사용한다.
  • Proxy는 외부 메서드 호출만 인터셉트하여 동일 클래스 내 메소드 호출 시, 동작하지 않는다.
  • Bean으로 정의된 Method를 대상으로만 적용이 가능하다.

용어

Aspect

횡단 관심사를 모듈화 한 것이다.

Target

Aspect를 적용하는 곳이다.

Advice

부가 기능(코드)을 담은 모듈이다.

Before Advice

  • 메서드가 실행되기 전에 수행하는 모듈이다.
  • @Before 어노테이션을 사용하여 정의한다.

Around Advice

  • 메서드가 실행되기 전과 실행된 후에 각각 수행하는 모듈이다.
  • @Around 어노테이션을 사용하여 정의한다.

After Advice

  • 메서드가 실행된 후에 수행하는 모듈이다.
  • @After 어노테이션을 사용하여 정의한다.

After Returning Advice

  • 메서드가 정상적으로 실행되어 결과를 반환한 후에 실행하는 모듈이다.
  • 결과를 반환한 후에 실행되므로, 메서드의 결과를 활용할 수 있다.
  • @AfterReturning 어노테이션을 사용하여 정의한다.

After Throwing Advice

  • 메서드가 실행 중 오류가 발생하였을 경우 실행하는 모듈이다.
  • @AfterThrowing 어노테이션을 사용하여 정의한다.

JoinPoint

Advice가 적용 될 수 있는 위치이다.

PointCut

JoinPoint를 선정하는 방법이다.

execution

  • JoinPoint를 선정할 메서드를 명시할 때 사용한다.
  • 표현식 : execution([접근 제어자-생략 가능] [리턴 타입] [클래스 이름] [메서드 이름]([인자])
  • 예제
Expression Description
excution(public * *()) 접근제어자가 public이고, 인자가 0개인 모든 메서드를 JoinPoint로 선정한다.
excution(* com.gracefulsoul.spring.aop..(..)) com.gracefulsoul.spring.aop 패키지에 있는 모든 클래스의 메서드 중 인자가 1개 이상인 메서드를 JoinPoint로 선정한다.
excution(* com.gracefulsoul.spring.aop...(..)) com.gracefulsoul.spring.aop 패키지와 하위에 있는 모든 클래스의 메서드 중 인자가 1개 이상인 메서드를 JoinPoint로 선정한다.
excution(* insert()) 메서드 명이 insert로 시작하는 인자가 1개인 메서드를 JoinPoint로 선정한다.
excution(* insert(, *)) 메서드 명이 insert로 시작하는 인자가 2개인 메서드를 JoinPoint로 선정한다.

within

  • 특정 타입에 속하는 메서드를 JoinPoint로 선정하도록 명시할 때 사용한다.
  • 예제
Expression Description
within(com.gracefulsoul.spring.aop.*) com.gracefulsoul.spring.aop 패키지에 있는 모든 클래스의 메서드를 JoinPoint로 선정한다.
within(com.gracefulsoul.spring.aop..) com.gracefulsoul.spring.aop 패키지와 하위에 있는 모든 클래스의 메서드를 JoinPoint로 선정한다.

bean

  • Spring 2.5 이상부터 지원하며, Bean을 통해서 JoinPoint를 명시할 때 사용한다.
  • 예제
Expression Description
bean(blackBean) Bean 이름이 blackBean인 클래스의 메서드를 JoinPoint로 선정한다.
bean(!blackBean) Bean 이름이 blackBean이 아닌 클래스의 메서드를 JoinPoint로 선정한다.

Advisor

Advice와 PointCut을 합쳐서 부르는 용어이다.

Weaving

PointCut으로 결정된 JoinPoint에 Advice를 삽입하는 과정이다.

Reference

댓글남기기