ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 11 AOP의 개념과 용어
    Spring/02 Spring DI와 AOP 2023. 7. 7. 20:53
    반응형

    AOP의 개념과 용어

    1) 공통코드의 분리

     

    1-1) 공통코드의 분리 (실습)

    AopMain.java(com.fastcampus.ch3.aop 패키지에 작성)

    >> 추가할 코드를 따로 분리해 작성해 놓고, 그 코드가 마치 추가된 것처럼 실행되는데 AOP

     

    1-2) 공통코드의 분리 (응용1)

    >> a로 시작하는 패턴의 메서드만 실행하게 된다

     

    1-2) 공통코드의 분리 (응용2)

    >> 에너테이션으로 출력

     

     

    2) 코드를 자동으로 추가한다면 어디에?

    - 메서드 중간에는 넣을 수 없다

    >> Advice{ } : 자동 추가할 코드

    >> Before Advice : 메서드의 시작에 자동 추가

    >> After Advice : 메서드의 끝에 자동 추가 >> Around Advice : 양쪽에 자동 추가

     

     

     

    3) AOP(Aspect Oriented Programming)?

    - 관점 지향 프로그램 or 횡단 관심사 or cross-cutting concerns?

    - 부가기능(advice)을 동적으로 추가해주는 기술

    - 메서드의 시작 또는 끝에 자동으로 코드(advice)를 추가

    동적: 코드가 실행중에 자동으로 추가되는 것

    >> Customer Service, Sales, Ware House는 각각의 모듈이 달라도

                    Logging, Transaction, Security는 공통으로 사용된다 (횡단 관심사)

     

     

    4) AOP 관련 용어

    >> oopAOP의 목적은 변경에 유리한 코드를 만드는 것 (분리)

     

     

    5) Advice의 종류

    - Advice의 설정은 XML과 애너테이션, 두 가지 방법으로 가능

     

     

    6) pointcut expression

    - advice가 추가될 메서드를 지정하기 위한 패턴

      execution(접근제어자(생략가능). 반환타입 패키지명. 클래스명. 메서드명(매개변수 목록))

    >> @Before + @After = @Around

    >> ProceedingJoinPoint pjp // 메서드의 모든 정보가 들어있다

         ①번의 getName( )은 메서드 이름, pjp.getArgs( )는 매개변수 // 메서드의 모든 정보를 제공

         반환 타입은 Object

     

    >> LogginAdivce가 여러개 적용되는 경우에는 @Order( ) 사용

          ex) @Order(1) @Order(2) @Order(3) class LogginAdvice위에 사용됨

     

     

     

    7) 실습

    - AOP 기능을 사용하기 위해 관련 라이브러리 다운로드

    pom.xml

    >> maven repository에서 aspectjrt, spring-aop, aspectjweaver 다운

     

     

    MyMath.java

     

    root-context_aop.xml (webapp/WEB-INF/spring/root-context_aop.xml생성)

     

     

    AopMain2.java

    >> 출력 결과 확인

     

     

     

    LoggingAdvice.java

    >> @Component @Aspect @Around aop로 사용하기 위해 등록

     

     

    AopMain2.java(변경)

    >> add 메서드만 적용되어 출력되었다

     

     

     

     

    반응형
Designed by Tistory.