AOP
AOP(Aspect Oriendted Programming)란 관점지향프로그래밍이다.
OOP와는 반대되는 개념이 아니다.
AOP란?
프로그래밍을 하다보면, 공통적인 기능이 많이 발생합니다. 이러한 공통 기능을 모든 모듈에 적용하기 위한 방법으로 상속을 통한 방법이 있습니다. 상속도 좋은 방법이기는 하지만 몇가지 문제가 있습니다. 우선 JAVA는 다중상속이 불가하므로 다양한 모듈에 상속기법을 통한 공통기능 부여는 한계가 있습니다. 그리고, 기능 구현부분에 핵심기능 코드와 공통기능코드가 섞여있어 효율성이 떨어집니다.
위의 상속을 통한 방법에 한계가 있어 AOP가 등장하게 되었습니다. AOP방법은 핵심 기능과 공통기능을 분리시켜놓고, 공통 기능을 필요로 하는 핵심 기능들에서 사용하는 방식입니다.
AOP방법을 익히려면 우선적으로 조금은 생소한 용어에 익숙해져야 합니다.
-Aspect : 공통기능
-Advice : Aspect의 기능 자체
-Jointpoint : Advice를 적용해야 되는 부분(ex. 필드, 메소드)(스프링에서는 메소드만 해당)
-Pointcut : Jointpoint의 부분으로 실제로 Advice가 적용된 부분
-Weaving : Advice를 핵심 기능에 적용하는 행위
스프링에서 AOP 구현 방법 : proxy를 이용합니다.
호출부(Client) ---> Proxy(대행) ---> Target(핵심기능)
스프링에서 AOP 구현 방식
-XML 스키마 기반의 AOP 구현
-@Aspect 어노테이션 기반의 AOP 구현
XML 기반의 AOP 구현
작업순서
1) 의존 설정(pom.xml)
2) 공통 기능의 클래스 제작 - Advice 역할 클래스
3) XML 설정파일에 Aspect 설정
의존설정
공통기능 클래스제작 -Advice 역할 클래스
XML 설정파일에 Aspect 설정
Advice 종류
<aop:before> : 메소드 실행 전에 adivce 실행 //많이쓰임
<aop:after-returning> : 정상적으로 메소드 실행 후에 advice 실행
<aop:after-throwing> : 메소드 실행중 exception 발생시 advice 실행
<aop:after> : 메소드 실행중 exception이 발생해도 advice 실행
<aop:around> : 메서드 실행 전/후 및 exception 발생시 advice 실행 //많이쓰임