old posting/Spring Framework

[Spring] AOP와 Spring AOP

마케팅스프린트 2021. 7. 2. 15:52
  • AOP
    • Aspect-oriendted Programming
      • OOP를 보완하는 수단으로, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법
  • AOP 주요 개념
    • Aspect와 Target
    • Advice
    • Join point와 Pointcut
  • AOP 구현체
    • 자바
      • AspectJ
      • Spring AOP
  • AOP 적용 방법
    • 컴파일
    • 로드 타임
    • 런타임
  • Spring AOP
    • 프록시 기반의 AOP 구현체
    • 스프링 빈에만 AOP를 적용할 수 있다.
    • 모든 AOP 기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 연동하여 엔터프라이즈 어플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적이다.
  • 프록시 패턴
    • 기존 코드 변경 없이 접근 제어 또는 부가 기능 추가를 할 수 있다.
  • Spring AOP
    • Spring IoC 컨테이너가 제공하는 기반 시설과 Dynamic 프록시를 사용하여 여러 복잡한 문제를 해결
    • 동적 프록시
      • 동적으로 프록시 객체를 생성하는 방법
        • 자바가 제공하는 방법은 인터페이스 기반 프록시 생성
        • CGlib은 클래스 기반 프록시도 지원한다.
      • Spring IoC
        • 기존 빈을 대체하는 동적 프록시 빈을 만들어 등록 시켜준다.
          • 클라이언트 코드 변경이 없다.
          • AbstractAutoProxyCreator implements BeanPostProcessor
  • 어노테이션 기반의 스프링 @AOP
    • 의존성 추가

 

  • Aspect 정의
    • @Aspect
    • 빈으로 등록해야 하기 때문에 (컴포넌트 스캔을 사용한다면) @Component도 추가한다.
  • Pointcut 정의
    • @Pointcut(표현식)
      • 주요 표현식
        • execution
        • @annotation
        • bean
      • Pointcut 조합
        • &&
        • ||
        • !
  • 어드바이스 정의
    • @Before
    • @AfterReturning
    • @AfterThrowing
    • @Around