zoukankan      html  css  js  c++  java
  • AOP 切入点表达式

    8.切入点表达式

      现在我们介绍一下最重要的切入点表达式:

      如上文所说,定义切入点时需要一个包含名字和任意参数的签名,还有一个切入点表达式,就是* findById*(..)这一部分。

      切入点表达式的格式:execution([可见性] 返回类型 [声明类型].方法名(参数) [异常])

      其中【】中的为可选,其他的还支持通配符的使用:

        *:匹配所有字符
          ..:一般用于匹配多个包,多个参数
          +:表示类及其子类

      运算符有:&&、||、!

      

    切入点表达式关键词:   

        1)execution:用于匹配子表达式。

                //匹配com.cjm.model包及其子包中所有类中的所有方法,返回类型任意,方法参数任意
                @Pointcut("execution(* com.cjm.model..*.*(..))")
                public void before(){}

          2)within:用于匹配连接点所在的Java类或者包。

                //匹配Person类中的所有方法
                @Pointcut("within(com.cjm.model.Person)")
                public void before(){}

                //匹配com.cjm包及其子包中所有类中的所有方法

                @Pointcut("within(com.cjm..*)")
                public void before(){}

         3) this:用于向通知方法中传入代理对象的引用。
                @Before("before() && this(proxy)")
                public void beforeAdvide(JoinPoint point, Object proxy){
                      //处理逻辑
                }

          4)target:用于向通知方法中传入目标对象的引用。
                @Before("before() && target(target)
                public void beforeAdvide(JoinPoint point, Object proxy){
                      //处理逻辑
                }

          5)args:用于将参数传入到通知方法中。
                @Before("before() && args(age,username)")
                public void beforeAdvide(JoinPoint point, int age, String username){
                      //处理逻辑
                }
     
          6)@within :用于匹配在类一级使用了参数确定的注解的类,其所有方法都将被匹配。 

                @Pointcut("@within(com.cjm.annotation.AdviceAnnotation)") - 所有被@AdviceAnnotation标注的类都将匹配
                public void before(){}

      

          7)@target :和@within的功能类似,但必须要指定注解接口的保留策略为RUNTIME。
                @Pointcut("@target(com.cjm.annotation.AdviceAnnotation)")
                public void before(){}

          8)@args :传入连接点的对象对应的Java类必须被@args指定的Annotation注解标注。
                @Before("@args(com.cjm.annotation.AdviceAnnotation)")
                public void beforeAdvide(JoinPoint point){
                      //处理逻辑
                }

      

          9)@annotation :匹配连接点被它参数指定的Annotation注解的方法。也就是说,所有被指定注解标注的方法都将匹配。
                @Pointcut("@annotation(com.cjm.annotation.AdviceAnnotation)")
                public void before(){}

          10)bean:通过受管Bean的名字来限定连接点所在的Bean。该关键词是Spring2.5新增的。
                @Pointcut("bean(person)")
                public void before(){}

  • 相关阅读:
    Android系统API综述
    Android中的WeakReference 弱引用
    Android代码编译环境配置 “Gerrit和Git环境配置”
    Android源代码下载 “Gerrit下载源代码”
    Android源代码编译过程及指令
    Android的Launcher启动流程 “Launcher部分启动流程”
    Android Frameworks的base目录内容分析 “Android Frameworks base”
    Android系统源代码目录结构 “Android源代码”“目录结构”
    (Android UI)Android应用程序中资源:图片、字符串、颜色、布局等
    (Android UI)Action Bar
  • 原文地址:https://www.cnblogs.com/sjqq/p/10241781.html
Copyright © 2011-2022 走看看