deblog

AOP(Aspect Oriented Programming)란?(1) 본문

IT/JAVA

AOP(Aspect Oriented Programming)란?(1)

스콘_ 2021. 4. 17. 17:20
반응형

AOP(관점 지향적인 프로그래밍)

문제를 바라보는 관점을 기준으로 프로그래밍하는 기법을 말한다.

아래와 같은 부가 기능을 처리할 때, 활용된다.

 

 

AOP의 역할

AOP는 문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통 모듈사항을 기준으로 프로그래밍 함으로써

공통모듈을 여러 코드에 쉽게 적용할 수 있도록 도와주는 역할을 합니다.

 

AOP 주요용어

1. Aspect : 여러객체에 공통으로 적용되는 기능

2. JoinPoint : Advice를 적용 가능한 지점을 의미. 메서드 호출, 필드 값 변경

3. Advice : 언제 공통 관심 기능을 핵심로직에 적용할 지를 정의

4. Pointcut : JoinPoint의 부분집합

5. Weaving : Advice를 핵심 로직 코드에 적용

 

Adivce의 종류

Before : 주 업무 이전에 처리할 필요가 있는 부가 작업처리

- 적용 예시 : <aop:before> @Before

After Returning : 주 업무 이전에 처리해야할 필요가 있는 부가 작업 처리 

- 적용 예시 : <aop:after-returning> @AfterReturning

After Throwing : 예외가 발생한 경우, 그 예외를 어떻게 처리해야 하는지에 대한 공통처리 모듈 작성

- 적용 예시 : <aop:after-throwing> @AfterThrowing

Around : 주 업무 시작과 마지막 부분에 처리해야할 필요가 있는 부가 작업을 처리

- 적용 예시 : <aop:around> @Around

Aspect의 Poincut 표현식

execution 명시자

  • execution(수식패턴?리턴타입패턴 클래스이름 패턴? 메서드이름 패턴(파라미터 패턴))
    • exection(public void set*(..)) : 리턴타입이 void이고, 이름이 set으로 시작하고,  파라미터가 0개 이상인 메서드 호출
  • execution(* void set*(..)) : 
    • 메서드 set으로 시작, 파라미터가 0개이상
  • execution(* net..*.get*(*,*)) :
    • net 하위 패키지에 있는 get으로 시작하는 2개의 파라미터 메서드 호출

within 명시자

특정 타입에 속하는 메서드를 piontcut으로 설정

- withon(net.pri.Service)

- within(.vo..*) : 패키지명이 vo가 들어가고 하위에 있는 모든 클래스

bean 명시자

명시자 스프링에서 추가적으로 제공하는 명시자 bean(*Service)

JdkRegexpMethodPointcut

pattern / patterns 프로퍼티를 통해 Pointcut 메서드 패턴을 정규표현식으로 설정
  - <property name="pattern" value=".*someWord.*"/> : someWord메서드 포함된 호출

pointcut의 조합

표현식1&&표현식2, 표현식1||표현식2

@Order(적용순서)

 

프락시 서버 호출

 

 

 

Comments