SpringAop(AOP의 개요 및 작성법)

RedNine·2023년 3월 8일
0

스프링

목록 보기
14/17

🍳AOP(Aspect Oriented Programming)

  • 관점 중심의 프로그래밍이다.
  • 불러다 사용하는것은 상관이 없는데 언제 불러다 사용할것이며, 언제 실행할것인가? (관점) => 메서드 호출방법
  • 에스펙트(Aspect)
    • 기존 객체지향 프로그래밍에서 모듈화 기법으로 추가된 중복코드(공통 처리 부분)를 별도의 독립된 클래스(Aspect)로 만들어 놓은 것이다.
    • 각 모듈이 실행될 때 Aspect를 위임해서 실행되게 하는 프로그래밍 방식이다.
  • Spring - AOP 총정리
  • 기본개념
  • 참고) OOP(Object Oriented Programming):객체 지향의 프로그래밍

🍳Before

🎈1.Advice(=공통관심 클래스) 작성

  • 좁은 의미의 Aspect

🎁BeforeLogAdvice

  • 특정 메서드 앞에 실행되게 하는 인터페이스

  • 1)스프링의 AOP(메서드 중심)->핵심클래스(target)의 메서드(ex 회원수정)
  • 2)생성된 객체를 배열로 받아온다.
  • 3)핵심클래스의 객체를 얻어온다.

🎈2.핵심모듈 클래스를 작성(OOP)

  • TestService(인터페이스)
  • TestServiceImpl (save(),write())

🎁TestService

  • 인터페이스
  • 여러개의 클래스 중에서 공통으로 사용기능(핵심기능을 가진 메서드)
  • 모든 핵심클래스에서 공통으로 사용할 목적으로 메서드이다.

🎁TestServiceImpl

  • 핵심클래스(=Target)
  • 핵심기능 메서드 => save(),writer()
  • 회원로그인 -> JoinPoint(메서드 앞에)
  • 어느 특정 메서드가 실행지정(PointCut)

🎈3.app.xml에서 AOP를 적용시킬수 있도록 처리

  • 1.핵심클래스 빈즈등록
  • 2.Advice클래스 빈즈등록
  • 3.PointCut 생성(어느위치에 AOP메서드를 지정해서 실행)
    • 접근지정 반환형 패키지명....클래스명 하위패키지(..) 특정메서드명(..) 0개이상
    • ()매개변수 한개 표시, (,*)매개변수 2개
  • ".writer." : 패키지 상관 없고, 메서드 이름(writer)만 가지고 따지겠다는 의미이다.

  • 4.Advisor 설정 (Advice+PointCut 이 둘을 연결시켜준다.)

  • 5.AOP를 적용(ProxyFactoryBean객체를 생성)
    • AOP객체를 생성 target(핵심클래스)
  • 프록시 객체는 중간에서 메서드를 가로채서 타깃클래스 먼저 실행시킨다.(중간에 가로채서 앞또는 뒤, 양쪽 모두에 호출한다.)

🎈4.최종 클래스

  • ResultMain ->main()
    • 핵심클래스 write()

🎁ResultMain

  • 흐름 : AOP객체를 생성 -> Adivisor작동 -> Advice+pointcut -> 중간에 가로채서 실행
  • 자식클래스의 id뿐만 아니라 부모 인터페이스의 id로도 자식객체를 가져올 수도 있다.

🎈실행결과 확인

: 자식클래스가 호출되기 전에 찍힌다.

🍳After

🎈AfterLogAdvice

  • AfterReturningAdvice 인터페이스 상속
    1. 리턴객체 2. 핵심클래스의 메서드 정보 3. 생성된 객체들 4. 핵심클래스의 객체

🎈app.xml

🎁Advice클래스 빈즈빈즈 추가 등록

🎁PointCut 추가 생성

🎁Advisor 설정 추가

🎁AOP를 적용(ProxyFactoryBean객체를 생성)

🎈실행결과 확인

  • 특정 메서드 뒤에 호출되는것을 볼 수 있다.

🍳Around Advice(Before & After)

🎈BALogAdvice

  • org.aopalliance.intercept.MethodInterceptor 인터페이스 상속
  • Around Advice(핵심메서드의 앞, 뒤로 실행)
    • => MethodInterceptor 인터페이스 상속
  • 자동으로 invoke()를 호출 => 앞, 뒤에 공통으로 실행할 내용을 기술
  • 핵심클래스의 메서드 호출 =>MethodInvocation객체명.proceed()를 이용해서 호출
  • 핵심클래스의 메서드 호출
    • 반환값O : 리턴값이 있는 메서드를 호출하는 경우

🎈app.xml

🎁Advice클래스 빈즈빈즈 추가 등록

🎁PointCut 이미 지정 되어있다.

🎁Advisor 설정 추가

🎁AOP를 적용(ProxyFactoryBean객체를 생성)

🎈실행결과 확인

0개의 댓글

관련 채용 정보