빠른 - 봄 학습 (AOP 주석 구성)

제 5 장 AOP 구성 노트

5.1 포인트 컷 표현

5.1.1 역할

표현의 방법으로 하나 개 이상의 특정 연결 지점을 찾기.

5.1.2 구문에 대한 자세한 내용

  1. 포인트 컷 표현식 구문
execution([权限修饰符] [返回值类型] [简单类名/全类名] [方法名]([参数列表]))
  1. 그림
    그림 삽입 설명 여기
    그림 삽입 설명 여기
    그림 삽입 설명 여기
    그림 삽입 설명 여기
    그림 삽입 설명 여기
  2. AspectJ를, "&&", "||"로 포인트 컷 표현, "!"등으로 연산자를 결합합니다.
    그림 삽입 설명 여기

실제 애스펙트 클래스 5.1.3 엔트리 포인트 표현식

그림 삽입 설명 여기

5.2 현재 연결 포인트 내역

5.2.1 개요

포인트 컷 표현식은 일반적으로 매크로 그룹에서 메소드를 위치 및 통지 특정 주석은 대응하는 연결 지점을 결정하기 위해 결합 될 수있다. 그래서 특정 연결 지점의 측면에서, 우리는 예를 들어, 정보의 특정 연결 지점에 대해 신경 수 있습니다 연결 지점의 현재 방법을 메소드의 이름, 매개 변수의 현재 값이 전달 등등 곳. 이 정보는 개체 인스턴스 joinpoint를 인터페이스에 캡슐화된다.

5.2.2 joinpoint를

그림 삽입 설명 여기

5.3 통지

5.3.1 개요

  1. 특정 연결 지점에 대한 작업을 수행 할 수 있습니다.
  2. 섹션은 하나 이상의 알림을 포함 할 수있다.
  3. 주석 표현을 알리는 데 사용 값은 종종 출발점입니다.

5.3.2 사전 통지

  1. 조언 실행 방법으로 실행될 : 조언하기 전에
  2. 사용 @Before를 주석을

5.3.3 후면 통지

  1. 포스트 알림 리어 통지 즉 복귀 부착 점, 접속점의 완료 후에 수행하거나 결과 예외를 발생한다
  2. 사용 @After를 주석을

5.3.4 반환 통지

  1. 뉴스 가기 여부는 연결 지점은 정상 반환 또는 조언이 실행됩니다 후 예외가 throw됩니다. 당신이 연결 지점이 반환 될 때 기록하려면, 반환 통지 대신에 사후 통지를 사용해야합니다.
  2. 사용 @AfterReturning 주석, 액세스 포인트 연결 알림 반환 반환 값
    반환 통지 ①,만큼 추가 주석을 @AfterReturning로 돌아의 속성은 연결 지점의 반환 값에 액세스 할 수 있습니다. 이 속성의 값의 반환 값에 전달 된 매개 변수의 이름을
    서명 통지 방법에 같은 이름의 매개 변수를 추가해야합니다 ②. 런타임 반환 값에 스프링 AOP가이 매개 변수를 통해 전달
    ③ 원래의 접선 포인트 필요는 표현 속성 포인트 컷에 표시
    그림 삽입 설명 여기

5.3.5 예외 통보

  1. 이상주의 사항 : 비정상적인 이상 알림은 연결 지점에서 발생하는 경우
  2. 将throwing属性添加到@AfterThrowing注解中,也可以访问连接点抛出的异常。Throwable是所有错误和异常类的顶级父类,所以在异常通知方法可以捕获到任何错误和异常。
  3. 如果只对某种特殊的异常类型感兴趣,可以将参数声明为其他异常的参数类型。然后通知就只在抛出这个类型及其子类的异常时才被执行

5.3.6环绕通知

  1. 环绕通知是所有通知类型中功能最为强大的,能够全面地控制连接点,甚至可以控制是否执行连接点。
  2. 对于环绕通知来说,连接点的参数类型必须是ProceedingJoinPoint。它是 JoinPoint的子接口,允许控制何时执行,是否执行连接点。
  3. 在环绕通知中需要明确调用ProceedingJoinPoint的proceed()方法来执行被代理的方法。如果忘记这样做就会导致通知被执行了,但目标方法没有被执行。
  4. 注意:环绕通知的方法需要返回目标方法执行之后的结果,即调用 joinPoint.proceed();的返回值,否则会出现空指针异常。
    그림 삽입 설명 여기

5.4 重用切入点定义

  1. 在编写AspectJ切面时,可以直接在通知注解中书写切入点表达式。但同一个切点表达式可能会在多个通知中重复出现。
  2. 在AspectJ切面中,可以通过@Pointcut注解将一个切入点声明成简单的方法。切入点的方法体通常是空的,因为将切入点定义与应用程序逻辑混在一起是不合理的。
  3. 切入点方法的访问控制符同时也控制着这个切入点的可见性。如果切入点要在多个切面中共用,最好将它们集中在一个公共的类中。在这种情况下,它们必须被声明为public。在引入这个切入点时,必须将类名也包括在内。如果类没有与这个切面放在同一个包中,还必须包含包名。
  4. 其他通知可以通过方法名称引入该切入点
    그림 삽입 설명 여기

5.4 指定切面的优先级

  1. 在同一个连接点上应用不止一个切面时,除非明确指定,否则它们的优先级是不确定的。
  2. 切面的优先级可以通过实现Ordered接口或利用@Order注解指定。
  3. 实现Ordered接口,getOrder()方法的返回值越小,优先级越高。
  4. 당신이 @Order 노트를 사용하는 경우, 숫자는 주석에 표시
    그림 삽입 설명 여기
    그림 삽입 설명 여기
출시 1333 원저 · 원 찬양 1090 ·은 10 만 + 조회수

추천

출처blog.csdn.net/weixin_42528266/article/details/104274706