• Spring Aop切点


    切点用于准确定位应该在什么地方应用切面的通知。通知和切点是切面的最基本的元素。在Spring AOP中要使用AspectJ的切点表达式来定义切点。下面我们列出Spring AOP所支持的AspectJ切点指示器。

     
    AOP原理图
    AspectJ指示器描述
    arg() 限定连接点匹配参数为指定类型的执行方法
    @args() 限定连接点匹配参数由指定注解标注的执行方法
    execution() 用于匹配连接点执行的方法
    this() 限定连接点匹配AOP代理的类型bean引用为指定类型的类
    target() 限定连接点匹配目标对象为指定类型的类
    @target() 限定连接点匹配特定的执行对象,这些对象对应的类要有指定类型的注解
    within() 限定匹配连接点指定的类型
    @within() 限定匹配连接点指定注解所标注的类型(当使用Spring AOP时,方法定义在指定的注解所标注的类里)
    @annotation 限定匹配带有特定注解的连接点

    在Spring 中尝试使用AspectJ其他的的指示器,将会抛出IllegalArgumentException异常。我们看到在上面介绍的指示器中只有execution()是实际执行匹配的,而其他指示器都是限制匹配的。所以我们通常使用execution指示器匹配,然后通过其他指示器进行限制。

    1.编写切点

    为了阐述Spring中的切面,我们要限定一个切点:

    public interface Performance {
        
        public void perform();
    }
    

    下面我们定义一个表达式,设置当perform()执行时触发通知的调用:

     
    匹配表达式
    execution(* concert.Perfirmance.perform(..))
    

    第一个*代表匹配所有类型的返回值,中间的类名.方法名指定匹配的类的特定方法,()中的 .. 表示匹配所有的参数列表。
    我们好可以在ececution中使用其他的匹配器,用来过滤匹配的方法:

    execution(* concert.Perfirmance.perform(..) && within(concer.*))
    

    上面的表达式表示匹配concert.Perfirmance的perform方法,并且该方法在concer包中。里面的&&表示与的意思,除此之外还有 || 表示或, ! 表示非。但是 & 在Xml中有特殊的含义,这时我们也可以使用 and 代替 && ,用 or 代替 || ,用 not 代替 !。

    2.在切点中选择bean

    处理上面;列出的指示器外,Spring还支持一种新的指示器bean(),它允许我们在切点中使用bean的ID来标示bean:

    execution(* concert.Perfirmance.perform(..)  and bean('woodstock'))
    

    在这里我们限定了bean的ID为 woodstock,其实bean()指示器更多的使用场景是 除去特定ID的bean应用通知:

    execution(* concert.Perfirmance.perform(..)  and !bean('woodstock'))


    作者:郭之源
    链接:https://www.jianshu.com/p/0dc2eea8e59e
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    追踪神秘的成都Uber:月入2万元是现实还是传说
    打造自己博客(wordpress)的wap手机版本
    今天刚申请成为Uber司机 已经接了5单了....大家有什么想问的吗?
    UBER司机奖励政策
    原生应用native、Web应用、混合应用hybrid:3者的优缺点解析
    “基数排序”之数组中缺失的数字
    html5 新增语义标签
    如何判断Javascript对象是否存在
    HTML 5 <details> 标签
    html5 notifications通知
  • 原文地址:https://www.cnblogs.com/zjdeblog/p/8819405.html
Copyright © 2020-2023  润新知