Spring AOP 의 간단 한 응용

업무 수요 로 인해 스스로 op 을 알 아 보고 기록 을 작성 합 니 다. 물론 대부분 타인 의 블 로그 와 공식 문 서 를 참고 합 니 다.
목차
  • [AOP 에 대하 여] (\ # AOP 에 대하 여)
  • 관련 용어
  • [Spring AOP 사용] (\ # Spring AOP 사용)
  • 주석 기반 사용
  • 의존 추가
  • [오픈 @ Aspect 주해] (\ # 오픈 @ Aspect 주해)
  • [정의 aspect (절단면)] (\ # 정의 aspect (절단면))
  • [성명 pointcut] (\ # 성명 pointcut)
  • 접점 표지 부
  • [성명 advice] (\ # 성명 advice)

  • 코드 주소
  • 참조 링크
  • AOP 에 대해 서.
    Spring 프레임 워 크 는 IOC 제어 반전 (Inversion of Control, IoC) 과 AOP 의 절단면 프로 그래 밍 (Aspect Oriented Program, AOP) 두 가지 중요 한 특성 이 있다 는 것 을 잘 알 고 있다.오늘 은 주로 AOP 에 대해 알 아 보 러 왔 습 니 다.
    소스 코드 를 수정 하지 않 은 상태 에서 한 개 또는 한 조 의 조작 에 추가 기능 을 추가 하 는 것 이 주요 역할 이다.로그 기록, 사무 처리, 권한 제어 등 기능 은 AOP 로 '우아 하 게' 실현 할 수 있 으 며 이러한 추가 기능 과 진정한 업무 논 리 를 분리 시 켜 소프트웨어 의 구조 가 더욱 뚜렷 해 질 것 이다.
    쉽게 말 하면 실행 할 때 코드 를 클래스 의 지정 방법, 지 정 된 위치 에 동적 으로 자 르 는 프로 그래 밍 사상 은 바로 절단면 을 대상 으로 하 는 프로 그래 밍 이다.
    관련 용어
    Aspect (절단면)aspectpointcutadvice 로 구성 되 는데 이것 은 가로로 자 르 는 정 의 를 포함 하고 링크 점 의 정의 도 포함한다.Spring AOP 가 절단면 을 담당 하 며 절단면 이 정의 하 는 횡단면 논 리 를 절단면 이 지정 한 링크 점 에 짜 냅 니 다.
    쉽게 말 하면 클래스 에 @ Aspect 주해 가 있 는 클래스 가 절단면 입 니 다.
    Join point (링크 점 / 기록 점)
    프로그램 실행 중의 한 점, 예 를 들 어 실행 방법 이나 이상 처리.
    Spring AOP 에서 하나의 join point 는 항상 하나의 운행 방법, 즉 방법 만 이 연결 점 이다.
    advice (증강 / 알림)
    join point (즉, point cut 규칙 을 만족 시 키 는 join point) 에서 특정한 시간 에 실 행 된 동작 입 니 다. Advice 는 몇 가지 유형 이 있 습 니 다. 다음은 토론 할 것 입 니 다.
    포인트 컷 (접점)
    join point 와 일치 하 는 술어 (a predicate that matches join points).
    advice 는 pointcut 표현 식 과 연결 되 어 있 으 며, pointcut 와 일치 하 는 임의의 joinpoint 에서 실 행 됩 니 다 (예 를 들 어 특정한 이름 을 가 진 방법 을 실행 합 니 다).
    쉽게 말 하면 pointcut 은 joinpoint 의 필터 로 pointcut 의 규칙 을 만족 시 키 는 joinpoint 만 advice 를 실행 할 수 있 습 니 다.
    Introduction
    하나의 유형 에 추가 적 인 방법 이나 필드 를 추가 합 니 다. Spring AOP 는 대상 에 게 새로운 인 터 페 이 스 를 도입 할 수 있 습 니 다. 예 를 들 어 introduction 을 사용 하여 bean 에 IsModified 인 터 페 이 스 를 실현 하고 이 를 통 해 caching 의 실현 을 간소화 할 수 있 습 니 다.
    Target object
    하나 이상 의 advice 대상 을 짜 냅 니 다. 대상 도 advised object 라 고 합 니 다.
    Spring AOP 는 실행 할 때 프 록 시 방식 으로 aspect 를 실현 하기 때문에 adviced object 는 항상 하나의 프 록 시 대상 (proxied object) 을 말 합 니 다. adviced object 는 원래 의 클래스 가 아니 라 advice 를 짜 서 생 긴 프 록 시 클래스 를 말 합 니 다.
    AOP proxy
    AOP 에 advice 를 짜 면 결과 클래스 가 생 깁 니 다. 이것 은 원류 와 논 리 를 강화 하 는 프 록 시 클래스 입 니 다. Spring AOP 에서 AOP 프 록 시 는 JDK 동적 프 록 시 대상 이나 CGLIB 프 록 시 대상 이 될 것 입 니 다.
    Weaving (짜 임)
    aspect 를 다른 대상 과 연결 하고 adviced object 를 만 드 는 과정 입 니 다. 구현 기술 에 따라 AOP 를 짜 는 방법 은 세 가지 가 있 습 니 다.
  • 컴 파일 러 가 짜 여 져 있 는데 이것 은 특수 한 자바 컴 파일 러 가 필요 합 니 다.
  • 클래스 적재 기 를 짜 려 면 특수 한 클래스 적재 기 가 필요 합 니 다.
  • 동적 프 록 시 를 짜 서 실행 기간 에 대상 클래스 에 증강 (Advice) 을 추가 하여 하위 클래스 를 생 성 하 는 방식 입 니 다.
  • 다른 순수 Java AOP 프레임 워 크 와 마찬가지 로 Spring AOP 는 실행 중 짜 임 을 수행 합 니 다.
    advice 의 유형
  • before advice, join point 앞에서 실 행 된 advice. before advice 는 join point 앞에서 실 행 됐 지만 join point 의 실행 을 막 을 수 없습니다. 이상 이 발생 하지 않 는 한 (즉, before advice 코드 에서 join point 의 코드 를 계속 실행 할 지 여 부 를 인위적으로 결정 할 수 없습니다)
  • after return advice, join point 가 정상적으로 돌아 온 후에 실 행 된 advice
  • after throwing advice, join point 에서 이상 을 던 진 후 실행 되 는 advice
  • after (final) advice, join point 가 정상 적 인 탈퇴 든 이상 이 발생 하 든 모두 실 행 될 advice.
  • around advice, join point 전과 joint point 가 탈퇴 한 후에 모두 실행 되 는 advice. 이것 은 가장 자주 사용 되 는 advice 입 니 다.
  • Pointcut expression
    Pointcut 은 pointcutexpression 을 통 해 설명 하 는데 몇 가지 한정 어가 있 습 니 다.구체 적 으로 는 Spring 문서 7.2.3 Declaring a pointcut 또는 aspectj - cheat - sheet 을 참고 할 수 있 습 니 다.
    Spring AOP 사용
    우 리 는 세 가지 방식 으로 Spring AOP 를 사용 할 수 있 습 니 다. 그들 은 각각 @ Aspect - based (Annotation), Schema - based (XML), 그리고 저층 의 Spring AOP API 입 니 다.우리 가 후속 으로 설명 하 는 것 은 주로 주해 의 실현 에 기초 한 것 이다.
    xml 를 사용 하 는 실현 원 리 는 주 해 를 사용 하 는 것 과 대체적으로 일치 합 니 다. 기본적으로 주 해 를 포함 하 는 설정 정 보 를 xml 설정 파일 로 옮 겼 을 뿐 입 니 다.
    AOP API 는 Spring 1.2 가 제공 하 는 역사적 용법 으로 현재 의 Sping 4 도 지원 되 고 주해 와 xml 도 그 에 기반 한 사용 입 니 다.SpringAOP 의 기본 입 니 다. 관심 있 는 것 은 링크 4 를 참고 하여 볼 수 있 습 니 다.
    주석 기반 사용
    @ AspectJ 지원 추가
    @ AspectJ 는 자바 주 해 를 사용 하여 AOP 의 인 코딩 스타일 을 실현 합 니 다. @ AspectJ 스타일 의 AOP 는 AspectJ Project 가 AspectJ 5 에서 도입 한 것 이 며 Spring 도 @ AspectJ 의 AOP 스타일 을 지원 합 니 다.
    의존 도 를 높이다
     
      
        org.springframework
        spring-aop
        ${spring.version}
      
      
      
        org.aspectj
        aspectjrt
        ${aspectj.version}
      
      
        org.aspectj
        aspectjweaver
        ${aspectj.version}
      
      
    

    @ Aspect 주석 열기
          spring-mvc.xml             @Aspect  
         //jdk   
         
         //cglib   
    
        
             xml    aop   namespace
        
         
                
    
        
    

    jdk 프 록 시 와 CGlib 프 록 시 JDK 동적 프 록 시 는 인터페이스 가 실 현 된 클래스 에 만 프 록 시 를 생 성 할 수 있 을 뿐 클래스 에 대해 서 는 생 성 할 수 없습니다.CGLIB 는 클래스 에 대한 에이 전 트 를 실현 하 는 것 으로 지정 한 클래스 에 하위 클래스 를 생 성하 여 덮어 쓰 는 방법 입 니 다.상속 이기 때문에 이런 종류 나 방법 은 final 로 성명 하지 않 는 것 이 좋 고 final 은 상속 과 다 태 를 막 을 수 있다.
    aspect 정의 (절단면)
    주석 @ Aspect 로 Bean 을 표시 하면 Spring 프레임 워 크 는 이 Bean 을 자동 으로 수집 하여 Spring AOP 에 추가 합 니 다. 예 를 들 어:
    @Aspect
    @Component
    public class TestAspect {
    }
    

    @ Aspect 는 Spring 에 의 해 자동 으로 식별 되 고 Bean 으로 등록 할 수 없습니다.이 를 위해 서 는 @ Component 주석 을 따로 추가 해 야 합 니 다.
    성명 포인트 컷
    pointcut 성명 은 두 부분 으로 구성 되 어 있 습 니 다.
    Pointcut 서명 (signature) 은 방법 명 과 관련 된 매개 변 수 를 포함 합 니 다.
    Pointcut 표현 식 (expression) 은 우리 가 관심 이 있 는 방법 을 지정 하 는 데 사 용 됩 니 다 (즉, advice 를 짤 수 있 습 니 다).
    pointcut expression
    이 방법 은 반환 값 이 없어 야 합 니 다. 이 방법 자체 가 pointcutsignature 입 니 다. pointcut 표현 식 은 @ Pointcut 주 해 를 사용 하여 지정 합 니 다. 위의 그림 은 pointcut 를 정의 합 니 다. 프로젝트 경로 aspects. trace. demo 에 맞 는 모든 방법 을 실행 하 는 것 을 설명 합 니 다.
    접점 표지 부 (designator)
    구체 적 으로 사용 하려 면 사례 코드 를 참고 하 세 요.
  • execution - for matching method execution join points, this is the primary pointcut designator you will use when working with Spring AOP
  • within - limits matching to join points within certain types (simply the execution of a method declared within a matching type when using Spring AOP)
  • this - limits matching to join points (the execution of methods when using Spring AOP) where the bean reference (Spring AOP proxy) is an instance of the given type
  • target - limits matching to join points (the execution of methods when using Spring AOP) where the target object (application object being proxied) is an instance of the given type
  • args - limits matching to join points (the execution of methods when using Spring AOP) where the arguments are instances of the given types
  • bean - limit the matching of join points to a particular named Spring bean, or to a set of named Spring beans (when using wildcards).
  • @target - limits matching to join points (the execution of methods when using Spring AOP) where the class of the executing object has an annotation of the given type
  • @args - limits matching to join points (the execution of methods when using Spring AOP) where the runtime type of the actual arguments passed have annotations of the given type(s)
  • @within - limits matching to join points within types that have the given annotation (the execution of methods declared in types with the given annotation when using Spring AOP)
  • @annotation - limits matching to join points where the subject of the join point (method being executed in Spring AOP) has the given annotation

  • 성명 조언
    advice 는 하나의 pointcut 표현 식 과 연결 되 어 있 으 며, 일치 하 는 join point 방법 으로 실 행 될 전 / 후 / 주변 에서 실 행 됩 니 다. pointcut 표현 식 은 간단 한 pointcut 이름 의 참조 또는 완전한 pointcut 표현 식 일 수 있 습 니 다.
    * Before
    
     Before Advice       @Before     
    
        advice   joinpoint     
    * After returning
    
                      After returning Advice。
    
       @AfterReturning     
    
    * After throwing 
                     ,  。
     
       @AfterThorwing     。
    
    * After (finally)
                     。
     
        @After   
     
            try{
                try{
                    //@Before
                    method.invoke(..);
                }finally{
                    //@After
                }
                //@AfterReturning
            }catch(){
                //@AfterThrowing
            }
    
    * Around
                            ,           ,   ,           .
     
        @Around     
    

    코드 주소
    https://github.com/Kcyfrank/SpringMVC-example
    참조 링크:
  • 공식 문서 Aspect Oriented Programming with Spring
  • Spring AOP 를 철저히 정복 한 이론 편
  • aspectj-cheat-sheet
  • Spring AOP API 소개
  • spring-aop-target-vs-this
  • Spring 의 AOP AspectJ 는 문법 에 대한 상세 한 설명 (가장 완전 하고 다른 곳 에 가서 찾 을 필요 가 없다)
  • AOP 그 정도 일 & 계속
  • 좋은 웹페이지 즐겨찾기