ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OOP(객체지향)와 AOP(관점지향)
    JAVA/OOP AOP 2022. 4. 14. 18:15

    20220414 수업

     

     


    1. AOP Aspect Oriented Object : 관점지향 프로그램 
    핵심로직은 아니지만, 공통적으로 실행되야하는 부수적인 기능(횡단관심사)을 모아서 
    AOP로 구현해놓는다. 

    1) AOP 용어들 

    # Target : 순수 비지니스 로직, 실행되어야할 핵심 기능. 객체 
    # Proxy : 핵심기능의 실행은 다른객체에 위임하고, 부가적인 기능을 제공하는 객체를 
    proxy는 내부적으로 target을 호출하지만, 중간에 필요한 관심사들을 거쳐서 target을 호출하도록 
    자동 혹은 수동으로 작성된다. 
    # JoinPoint : Target객체가 가진 메서드. 특정 작업이 실행되는 시점. 
    # PointCut : 관심사와 비지니스 로직이 결합되는 지점을 결정하는 것. JointPoint의 부분집합. 실제상황, 발생하는 상황
    # Aspect : 관심사 자체를 추상적으로 말함 
    # Advice : 실제 공통기능을 분리시켜놓은 코드 (*)
    JointPoint에 삽입되어져 동작하는 코드. 
      
    Before Advice : 핵심기능이 실행되기 전에 
    After Returning Advice : 핵심기능 정상적으로 실행완료된 후 실행 
    After Throwing Advice : 핵심기능 실행시 예외 발생했을때 실행 
    After Advice : 핵심기능 실행 후 
    Around Advice : 핵심 기능 전/후 둘다 적용.
    * 어노테이션으로 제공 : @Before,@After....

    2) 3가지 Advice weaving 방식 
    - 컴파일 로딩시 weaving : AspectJ 사용방식 
    - 클래스 로딩시 weaving : AspectJ 지원 
    - 런타임시 weaving : 프록시 이용

    대상객체(Service)의 인터페이스를 가지고 프록시를 만들어 
    프록시로 대상 객체에 간접 접근하게된다. 
    인테페이스가 없으면 aop적용이 안되니 만들도록하자. 

    client 요청 ---> Controller ----Model Proxy----> Model(Service) Before
         <--- Model Proxy---           After 

    3) 라이브러리 추가 
    - spring-aop : 스프링 기본 라이브러리에 포함  
    - aspectj : 이미 프로젝트 생성하면 들어가있다 
    - aspectweaver 

    4) PointCut 표현식 

    #1. execution() : 표현식 사용하여 적용할 메서드를 패턴으로 명시 

    execution(접근지정자 리턴타입 패키지경로포함클래스패턴.메서드이름패턴(파라미터패턴))

    접근지정자 : public에만 aop 적용가능. -> 생략가능 
    리턴타입 : * (모든리턴타입) 


    * : 모든
    .. : 0개이상 


    execution(public void set*(..))
    execution(* test.ex01.package.*.*()) 리턴타입은 모든, 해당패키지 안의 모든 클래스의 모든 매개변수없는 메서드 
    execution(* get*(Integer,..))


    #2. within() : 특정 타입에 속하는 메서드(범위)를 설정 
    #3. bean() : 스프링에서 제공해주는 명시자, 스프링빈을 지정. 

     

    댓글

Designed by Tistory.