본문 바로가기

Spring/Core

Spring Core - 프록시 AOP

Contents

  • 스프링 AOP의 특징
  • 어노테이션 기반의 AOP

 

스프링 AOP 의 특징

프록시 기반의 AOP 구현

스프링 빈에만 AOP 를 적용할 수 있다.

 

 

프록시 패턴

프록시 패턴에는 인터페이스가 있다.

클라이언트는 이 인터페이스 타입으로 Proxy 객체를 사용하게 된다.

Proxy객체가 실제 객체를 감싸서 실행을 하게 된다.

 

근데 이렇게 프록시 패턴을 직접 구현을 하면 여러 문제점이 생긴다

 

-프록시 패턴을 직접 구현하면 생기는 문제점

  • 매번 이런 프록시 클래스를 작성해야하나?
  • 한 Real Subject 가 아니라 여러 클래스에 advice를 적용하고 싶다면..?

위 같은 문제들이 생겨났고

 

이걸 해결하기 위해 등장한게 Spring AOP

 

스프링 AOP 에서는 동적으로 프록시를 생성해서 이런 문제들을 해결해줬다.

스프링이 동적 프록시를 만드는 방법은 토비 스프링을 참고하자

-AbstractAutoProxyContainer

 

 

어노테이션 기반의 AOP

 

그러면 이제 스프링 부트에서 어떻게 AOP를 쓰는지 알아보자

먼저 의존성을 추가해야 한다.

dependency 에 

Spring-boot-starter-aop 를 설치해준다.

 

 

Aspect 를 생성한 후 @Aspect 를 붙여준다.

 

advice 를 만들어 준다

Around 는 어드바이스의 종류  around 는 메소드 실행 전, 후 에 모두 넣을 수 있는 강력한 어드바이스의 종류다

execution은 pointcut의 종류

 

 

포인트컷의 정의

  • execution
  • @annotation
  • bean

 

어드바이스의 정의

  • Before
  • AfterReturning
  • AfterThrowing
  • Around

 

 

AOP를 Annotaion 으로 만드는방법

포인트컷에 어노테이션을 넣기위해,

어노테이션을 만들때,

@RetentionPolicy 란?

이 어노테이션 정보를 얼마나 유지할까냐다

CLASS 면 클래스 파일까지 유지. 즉, 바이트 코드에서 이 어노테이션 정보가 남아있다는것, 이게 기본값이다.

 

이 어노테이션을 메소드 위에 어노테이션을 붙여주면 된다.