본문 바로가기
Spring/이론

관점 지향 프로그래밍(AOP, Aspect Oriented Programming)

by 모스키토끼 2020. 3. 7.

위 그림과 같이 핵심 기능들인 Layer들을 가로지르는 부가 기능들을 모듈화할 필요가 있다.

Layer 안에 부가 기능들을 각 각 삽입한 단순 접근의 단점

  • 비즈니스 로직과 로깅 기능을 혼합
    • 관심사의 분리 원칙을 위반
    • 복잡성과 상호 의존성 향상
    • 느슨하게 결합 된 디자인 방지
    • 반복되는 코드로 수정이 어려워진다.

 

Spring AOP

- AOP는 부가 기능(Logging, Transaction...)을 메인 프로그램의 비즈니스 로직과 분리

-> Spring Framework가 부가 기능들을 핵심 기능에 적용시켜준다.

 

AOP-Weaving

  1. app function 호출(Caller -> Proxy)
  2. 횡단 관심사(cross-cutting concern) 실행 (Proxy -> Aspect)
  3. app function 호출(Proxt ->Aspect -> Target)
  4. app function에서 return(Target -> apspect  ->Proxy)
  5. 횡단 관심사(cross-cutting concern) 실행(Proxy -> Aspect)
  6. 값 Caller에 return

AOP Definitions

예시 코드

/*Aspect*/
@Aspect
public class Logger{
	/*Pointcut*/
    @Pointcut("execution(void 패키지명.클래스명.메서드())")
    private void selectSound()
    {
    }
    /*Advice*/
    @Before("selectSound()")
    public void aboutToSound(){
    	sysout("before: about to sound");
    }
}
    
/*Target*/
public class Cat implements AnimalType{
	String myName;
    
    public void setMyName(String myName){
    	this.myName = myName;
    }
    /*JoinPoint*/
    public void sound() {
    	sysout("Cat name =" + myName + ": " + "Meow!");
    }
}
    
    
    
    
    
    

 

Annotation 설명

Aspect

  • 여러 클래스를 가로 지르는 엔터프라이즈 애플리케이션 문제를 구현하는 클래스
  • pointcut과 advice의 조합
  • 예 : 로깅, 프로파일링, 보안, 트랜잭션

Join Point

  • 애플리케이션에서 AOP 측면을 플러그인 할 수있는 지점
  • application funtion == joinpoint 

Advice

  • 메소드 실행 전후에 수행되는 실제 조치
  • joinpoint 수행되기 전에 수행되는 것 : Before advice
  • 후에 수행되는 것: After advice 

PointCut

  • advice을 실행해야하는 일련의 Join Point 집합
  • 표현식 또는 패턴을 사용하여 PointCut 지정
  • joinpoint가 너무 많은 경우에 Pointcut을 사용해서 간단하게 표현 가능 ( *.f() )

 

 

Advice 타입

before: 메소드 실행 전에 advice실행

after: 결과에 관계없이 메소드 실행 후 advice실행

after-returning: 메소드가 성공적으로 완료된 경우에만 메소드 실행 후 advice 실행

after-throwing: 메소드가 예외를 throw하여 종료 된 경우에만 메소드 실행 후 advice 실행

around: advice 메소드의 호출 전후에 advice 실행

 

Pointcut Expression Pattern

Aspects Implementation 2가지

  • regular Java classes 와 XML config로 Aspect 설정
  • regular Java classes 와 annotaion로 Aspect 설정

요약

AOP key 요소들

-aspect, Pointcut, join point, advice

 

AOP를 사용하면 여러 클래스에 영향을 주는 기능을 재사용 가능한 모듈 (예 : aspect)로 캡슐화 할 수 있다.

 

AOP의 장점 :

  • 관심의 분리
  • 코드 재사용 및 모듈화
  • 느슨하게 결합 된 디자인

 

reference

https://www.codejava.net/frameworks/spring/understanding-spring-aop

 

Understanding Spring AOP

DetailsWritten by  Nam Ha Minh Last Updated on 24 June 2019   |   Print  Email Table of Content OverviewCross cutting concernsNeed of AOPAOP terminologiesAdvicesPointCuts and PointCutAdvisorsProxy ObjectsSample Application   1.     Overview In this article

www.codejava.net

 

'Spring > 이론' 카테고리의 다른 글

MVC(Model-View-Controller)  (0) 2020.03.17
DB 연동(with Spring JDBC)  (0) 2020.03.09
의존성 주입(Dependency Injection)  (0) 2020.03.05
JSP(Java Server Pages)  (0) 2020.03.05
Servlet  (0) 2020.03.04

댓글