헬린코린이

[Spring Framework] AOP 본문

Programming/Spring Framework

[Spring Framework] AOP

HCD 2023. 2. 10. 17:33

AOP는 

Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다.

쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각

모듈화 하겠다는 것이다

 

Aspect는 부가될 기능을 정의한 Advice와, 해당 Advice를 어디에 적용할지를 결정하는 Pointcut 정보를 가지고 있습니다.

코드를 보겠습니다

    <context:component-scan base-package="com.spring.biz"/>
      <bean class="com.spring.biz.common.LogAdvice" id="la"/>
      <aop:config>
      	<aop:pointcut expression="execution(* com.spring.biz..*Impl.*(..))" id="aPointcut"/>
      <!-- * 반환타입이고 com.spring.biz..*패키지명이고 Impl.* 이이름을 가진 클래스의 
      		메서드를 가질거야 (..)인자개수는 상관없어 -->	
        <aop:aspect ref="la">				
      		<aop:before method="printLog" pointcut-ref="aPointcut"/>
      	</aop:aspect>
      </aop:config>
      <!-- 반복할 건데 뭐를 LogAdvice를 언제? aPointcut이 실행되기 전에 뭐를 pirntLog메서드를 -->

 

-  스프링 컨테이너야 너 AOP 할 줄 알지?

    앞으로 비즈니스 메서드(CRUD,핵심관심,핵심로직)를 수행하기 전에

    공통관심(횡단관심,ex)로그/트랜젝션/인증/보안/Util클래스...)인 LogAdvice를 실행시켜 줘라고 설정했습니다.

 

 

aop:??? <<쓸 수 있는 태그 종류

 

@Befor 는 AOP가 적용될 메서드가 실행되기 전의 시점을 말한다.

@After는 AOP가 적용될 메서드가 실행된 이후의 시점을 말한다.

메서드가 성공적으로 수행된 경우와 에러가 발생하여 Exception이 생긴 경우 모두 해당된다.

finally 같은 성격 예외가 발생되든 말든 무조건 실행된다

@AfterReturning는 AOP가 적용될 메서드가 에러 없이 성공적으로 실행된 이후의 시점`을 말한다.

@AfterThrowing는 AOP가 적용될 메서드가 에러가 발생하여 Exception을 던지는 시점을 말한다.

@Around는 AOP가 적

용 될 메서드의 시작부터 끝까지 전반적인 시점을 모두 관리한다.

 

JoinPoint와 ProceedingJoinPoint의 차이

모든 어드바이스는 JoinPoint를 첫 번째 파라미터에 사용할 수 있습니다.

(생략은 가능하지만 두 번째 파라미터로는 사용할 수 없습니다.)

 

그러나 @Around는 ProceedingJoinPoint를 사용해야 합니다.

ProceedingJoinPoint는 JoinPoint의 하위 타입으로, 주요한 기능이 하나 추가됩니다.

 

JoinPoint의 기능으로는

 - getArgs() : 메서드 인수를 반환합니다.

 - getThis() : 프록시 객체를 반환합니다.

 - getTarget() : 대상 객체를 반환합니다.

 - getSignature() : 조인되는 메서드에 대한 설명을 반환합니다.

 - toString() : 조인되는 방법에 대한 유용한 설명을 인쇄합니다.

 

ProceedingJoinPoint의 기능은

 - proceed() : 다음 어드바이스나 타깃(실제 객체)을 호출합니다.

 

Comments