• spring expression切点表达式


    1、切点指示器

    类型如下:

    1、execution:

    *用来匹配连接点方法的,用的最多的一种指示器,可以匹配多个类,必须要写返回类型,方法名,方法参数,可以写通配符。

    2、within

    用来匹配符合条件的所有类的连接点方法,不可以指定返回类型和方法参数,可以用通配符。expression="within( com.pointcut.impl.*)",匹配com.pointcut.impl包下的所有类的连接点方法。

    3、target

    动态代理生成的对象,这种指示器一般表示某个动态代理对象是某个类型,比如this(com.service.EmployeeService),匹配所有EmployeeService的实现类。可以写接口,抽象类,父类类型,它的子类或实现类都会被匹配。不能写通配符。target(com.pointcut.impl.BookImpl)

    4、this

    target,匹配接口或抽象类,父类的实现类和继承类,不能写通配符。 不同的是: this(com.pointcut.impl.BookImpl)如果写实现类的全限定名的话,父类或抽象类未被重写Override的方法将不会匹配到,而 target能够匹配到。 因为: 使用“this(类型全限定名)”匹配当前AOP代理对象类型的执行方法。 使用“target(类型全限定名)”匹配当前目标对象类型的执行方法。

    5、args

    此指示器匹配对应的方法参数类型,比如args(integer,string),匹配所有带两个参数,并且类型是interger,string的连接点方法。

    6、@target

    用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;

    7、@args

    用于匹配当前执行的方法传入的参数持有指定注解的执行;

    8、@within

    用于匹配所以持有指定注解类型内的方法;

    9、@annotation

    用于匹配当前执行方法持有指定注解的方法;

    10、bean

    指定bean进行aop代理,bean("emp")

     

    2、指示器逻辑运算符

    与and(&&)

    或or(||)

    非not(!)

    3、指示器格式

    不同的指示器,表达式的写法模式是不一样的。

    execution

    execution(modifiers-pattern?  ret-type-pattern  declaring-type-pattern?  name-pattern(param-pattern) throw-pattern?)

    含义如下:

    ?代表有或者没有,没有问号就必须要写

    modifiers-pattern? 修饰者模式 public....

    ret-type-pattern 返回类型模式 void,String.....

    declaring-type-pattern? 声明类型模式 static

    name-pattern 方法名字模式

    param-pattern方法参数模式

    throw-pattern?方法抛出异常模式

    4、通配符

    *:表示任意名字

    ..:任意段的任意字符,匹配任何数量字符的重复,如在类型模式中匹配任何数量子包;而在方法参数模式中匹配任何数量参数。

    +:匹配指定类型的子类型;仅能作为后缀放在类型模式后边。

     

    5、常见例子

    1. execution(public * *(..)):找到所有的公有方法

    2. execution(* *get(..)):

    3. public * com.service.emp.EmployeeService+.*(..))

    • 表示接口的所有方法以及此接口实现类自己的方法都会被aop代理

    1. public * com.service...(..)) 表示com.service包以及子孙包下

    2. within( com.service..*) 表示com.service包以及子孙包下的所有类, 写法与execution指示器是不同的,不需要写返回类型

    3. target( com.service.emp.impl.EmployeeServiceImpl) 给EmployeeServiceImpl 进行aop代理,不能使用通配符.表达式中指定父类型或者接口时是可以的.

    4. this(com.service.emp.impl.EmployeeServiceImpl):给EmployeeServiceImpl类 进行aop代理.写法与target类似. 意思是:如果能代理成功,那么生成的代理类是表达式里面设定的类型的实例

    5. bean(emp)表示给emp这个bean进行aop代理

  • 相关阅读:
    CCS的一些问题
    SignalTapII新特性Storage Qualification
    信号发生器输出幅值与输出阻抗的关系
    关于print函数的一些细节问题探讨
    hp3020 打印机驱动完全卸载方法
    【转】Ruby Selenium 测试
    [nodejs]CoffeeScript里实现Mixin
    [Ruby]ARGF的使用
    【Groovy】使用Maven集成Groovy代码
    [nodejs]optimist库
  • 原文地址:https://www.cnblogs.com/liweixml/p/11789208.html
Copyright © 2020-2023  润新知