SPRING - AOP

고규빈·2022년 6월 14일
0

AOP 란?

  • AOP는 관점 지향 프로그래밍으로 공통으로 사용되는 기능을 따로 구현하여 동작시키는 방식을 말한다.

AOP 용어 정리

  • Aspect : 어떤 핵심 기능에 어떤 공통 기능을 실행할지 동작 방식을 결정하는 개념 (AOP 모듈)
  • Advice : 공통 기능을 담은 구현체, 동작 시점을 나타냄
  • Jointpoint : 핵심 기능의 모든 메소드를 말함
  • Pointcut : Jointpoint의 부분으로 실제로 적용될 핵심기능 메소드
  • Weaving : 핵심 기능에 공통 기능이 삽입되는 과정

AOP 사용

  • pom.xml 의존성 주입
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>버전</version>
</dependency>

<dependency> 
<groupId>org.aspectj</groupId> 
<artifactId>aspectjweaver</artifactId> 
<version>버전</version> 
</dependency>
<bean id="공통기능 id" class=“공통기능 클래스"/>
<aop:config>
	<aop:pointcut id="핵심기능 id" expression=“핵심기능 메서드 표현식 " />
	<aop:aspect ref=" 공통기능 id ">
		<aop:advice종류 pointcut-ref="핵심기능 id " method="log"/>
	</aop:aspect>
</aop:config>

- advice종류

<aop:before> : 핵심기능 메서드 실행 전에 advice실행
<aop:after-returning> : 정상적으로 핵심기능 메서드 실행
<aop:after-throwing> : 핵심기능 메서드 실행 중 exception 발생 시 advice실행
<aop:after> : 핵심기능 메서드 실행 중 exception이 발생하여도 실행 후에 advice실행
<aop:around> : 핵심기능 메서드 실행 전/후 advice 실행

<bean id="공통기능 id" class=“공통기능 클래스"/>
<aop:config>
  <aop:pointcut id="핵심기능 id" expression=“핵심기능 메서드 표현식 " />
  <aop:aspect ref=" 공통기능 id ">
  	<aop:advice종류 pointcut-ref="핵심기능 id " method="log"/>
  </aop:aspect>
</aop:config>

- 핵심기능 메소드 표현식

execution(수식어 리턴타입 패키지경로.클래스명.메소드이름(파라미터))
▶ 수식어패턴 : public, private 등등의 수식어를 명시, 생략 가능
▶ 리턴타입 : 리턴 타입을 명시
▶ 클래스이름, 이름패턴 : 클래스 이름 및 메서드이름을 패턴으로 명시
▶ 파라미터패턴 : 매칭될 파라미터에 대해 명시
▶ '*' : 모든 값을 표현
▶ '..' : 0개 이상을 의미

예)
1. execution(public void set(..))
=> 리턴 타입이 void이고 메소드 이름이 set으로 시작하며, 파라미터가 0개 이상인 메소드
2. execution(
sp.aop.service..())
=> sp.aop.service 패키지의 파라미터가 없는 모든 메소드
3. execution( sp.aop.service...(..))
=> sp.aop.service 패키지 및 하위 패키지에 있는 파라미터가 0개 이상인 모든 메소드
4. execution(
get())
=> 메서드 이름이 get으로 시작하고 1개의 파라미터를 갖는 메소드
5. execution(Integer read*(Integer, ..))
=> 리턴 값이 Integer이고 메소드 이름이 read로 시작하며 첫번째 파라미터 타입이 Integer이고, 1개 이상의 파라미터를 갖는 메소드

profile
안녕하세요

0개의 댓글