AOP切入点表达式

在面向切面编程中(AOP),往往最先要做的事是配置切入点,官方文档中的切入点表达式如下所示:

语法:指示符(访问修饰符(可选) 返回值类型(必须) 包名类名(可选) 方法(必须)  参数)

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

 

     例如execution (public * com.ljb.service.impl..*.*(..))

  1. execution:指示符,execution是最常用的指示符,用于匹配方法执行的连接点。
  2. public:访问修饰符,该参数可选。
  3. 第一个*号:返回值类型,*号表示所有的类型,即通配符。
  4. 包名:需要拦截的包名,后面的两个点表示当前包和当前包的所有子包,即例子中的com. ljb.service.impl包和该包的子孙包下所有类。
  5. 第二个*号:类名,*号表示所有的类。
  6. *(..):方法名,*号表示所有方法,括号里面表示方法的参数,两个点表示任何参数,可有可无。

 

     1. 拦截BookServiceImpl类中的select ()方法

        execution(public * com.ljb.service.impl.BookServiceImpl.select())

 

     2. 该表达式同上,只是省略了public修饰符

        execution(* com.ljb.service.impl.BookServiceImpl.select ())

 

     3. 包名与类名都用*号,视具体路径来判断使用的*号个数,此处路径同上,故而有五个*

        execution(* *.*.*.*.*.select())

 

     4. 拦截指定包及其子包下的BookServiceImpl类的所有select方法

        execution(* com..BookServiceImpl.select())

 

     5. 拦截所有BookServiceImpl结尾的类的所有无参方法(此处*号匹配所有方法)

        execution(* com..*BookServiceImpl.*())

 

     6. 拦截所有BookServiceImpl结尾的类的所有带任意参数方法

        execution(* com..*BookServiceImpl.*(..))  参数任意,可有可无

        execution(* com..*BookServiceImpl.*(*))  参数个数任意,必须有

 

     7. 拦截所有select开头的带任意参数方法

        execution(* select*(..))

 

     8. 拦截所有select开头或者add开头的方法(||、or)

        expression="execution(* select*(..)) || execution(* add*(..))

        expression="execution(* select*(..)) or execution(* add*(..))

 

     9. 拦截容器中指定的bean

        拦截容器中BookService类中的所有方法

        expression="bean(BookService)"

        拦截容器中Service结尾的类中的所有方法

        expression="bean(*Service)"  

 

     10. 不拦截select开头的方法(!、not)

        expression="!execution(* select*(..))"

        expression=" not execution(* select*(..))

你可能感兴趣的:(spring)