ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ Spring ] 3. 스프링 AOP 관점 지향 프로그래밍 (필터?)
    스타터스 백엔드 3기 2023. 1. 12. 15:35

    하루입니다.

     


     

    관점 지향 프로그래밍(AOP, Aspect Oriented Programming)의 개요

    메서드 안의 주기능과 보조기능을 분리 후 선택적으로 메서드에 적용해서 사용한다는 개념이다.

    전체 보조 코드를 한 군데에 모아 관리할 수 있다.

    보조 기능을 원하는 주기능에 선택적으로 적용할 수 있어 코드가 단순해지고 가독성도 향상된다.

     

    예시


    Member 클래스


    login ( )
    소요시간 측정 ( )
    로그인 핵심 처리 ( )
    insert ( )
    db 연결 / 해제

    서블릿의 필터
    톰캣에서 제공되기에 서블릿/jsp에서만 사용 가능하다.

    요청 처리 전 인코딩 해야 한다
    처리에서 응답까지 소요시간 측정한다
    예외처리 한다

    공통 관심 처리 : 모든 자바 클래스가 공통으로 실행해야 하는 내용 (횡단관심)
     : 별도 클래스로 선언한다.

     - 소요시간 측정
     - 예외처리
     - db 연결 / 해제



    핵심 관심 처리 : 해당 메소드에서만 처리한다. (종단관심)
     : 핵심 관리 처리 클래스 선언한다.
     : weaving




    위의 코드가 아래처럼 변경된다.

     

     

    aspect 공통관심로직
    advice aspect 클래스
    target 핵심 관심 클래스
    weaving target에 advice 연결
    weaving 설정 이후에는 target 클래스 객체 - 메소드를 호출하면 자동으로 advice 클래스가 실행된다.
    point-cut advice 지정 시점 결정
    예: target 클래스의 public 메소드 실행하기 전에 실행하겠다!

     

     

     

     

    Maven AspectJWeaver  ==>  pom.xml에 추가


    - spring mvc maven 프로젝트
    - => AspectJ Weaver 다운
    - pom.xml에 추가한다
    aspectjweaver

    <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.9.1</version>
            <scope>runtime</scope>
    </dependency>

     

     


     

    실습

    1. Member (target class)

    2. Board (target class)

    3. Common (advice class)

    4. aspectjweaver Dependency 추가

    5. aop1.xml 구성

    6. 핵심 관심 이전(before) / 이후(after) / 이전이후(around) 

     

     

    1. xml로 aop 설정하기 

    - aspect 클래스 생성






    - aop1.xml 설정
    - Member, Board, Common 클래스 객체 생성
    - <aop:config /> 설정 생성
    - <aop:config> </ aop:config> 내부에 pointcut, aspect, before를 설정한다.






     

     

     

     

    2. annotation으로 관점지향프로그래밍 하기

     

     

     



     

     

    expression 표현


    "execution ( * aop1.*.*(String, int))"

     - 모든 접근제어자, aop1 패키지, 모든 클래스, 모든 메소드, String / int 파라미터

    "execution ( * aop1.*.log*(..))"

    - 모든 접근제어자, aop1패키지, 모든 클래스, log로 시작하는 메소드, 모든 파라미터

    "execution ( * *.*.*(..))"

    - 모든 접근제어자, 모든 패키지, 모든 클래스, 모든 메소드, 모든 파라미터

    "execution ( public aop1.*.*(..))"

    - public 접근제어자, aop1 클래스, 모든 메소드, 모든 파라미터

     

     

     


     

Designed by Tistory.