Java进阶知识22 Spring execution 切入点表达式

1、概述

  切入点(execution ):可以对指定的方法进行拦截,从而给指定的类生成代理对象。(拦截谁,就是在谁那里切入指定的程序/方法)

格式:

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

参数解析:

modifiers-pattern?:指定方法的修饰符,支持通配符,该部分可以省略。(public/private/protected
  ret-type-pattern:指定方法的返回值类型,支持通配符,可以使用 * 来匹配所有的返回值类型。
  declaring-type-pattern?:指定方法所属的,支持通配符,该部分可以省略。(要切入的类:class
  name-pattern:指定要匹配的方法名,支持通配符,可以使用"*"通配符来匹配所有方法。(要切入的方法
  param-pattern:指定方法声明中的形参列表,支持两个通配符,即"*"和"..",其中“*”代表一个任意类型的参数,而“..”代表零个或多个任意类型的参数。例如,() 匹配一个不接受任何参数的方法,而(..) 匹配一个接受任意数量参数的方法,(*)匹配了一个接受一个任何类型的参数的方法,(*,String)匹配了一个接受两个参数的方法,其中第一个参数是任意类型,第二个参数必须是String类型。(要切入的方法的参数列表)
  throws-pattern:指定方法声明抛出的异常,支持通配符,该部分可以省略。

切入点语法常用的几种:

 1 <!-- 切入点表达式语法: -->
 2 <!-- 【1、拦截所有public方法】 -->
 3 <aop:pointcut expression="execution(public * *(..))" id="pt"/>  4
 5 <!-- 【2、拦截所有save开头的方法】 -->
 6 <aop:pointcut expression="execution(* save*(..))" id="pt"/>  7
 8 <!-- 【3、拦截指定类的指定方法, 拦截时候一定要定位到方法】 -->
 9 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>
10
11 <!-- 【4、拦截指定类的所有方法】 -->
12 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.*(..))" id="pt"/>13
14 <!-- 【5、拦截指定包,以及其自包下所有类的所有方法】 -->
15 <aop:pointcut expression="execution(* com..*.*(..))" id="pt"/>16
17 <!-- 【6、多条件】 -->
18 <!-- 或:||   or -->
19 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) || execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />20 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) or execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />21
22 <!-- 且:&amp;&amp;   and -->  <!-- 语法虽然没错,但,没意义 -->
23 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) &amp;&amp; execution(* com.bw.dao.impl.MessageDao.save(..))" id="pt" />
24 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) and execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />25
26 <!-- 【7、取非值:not  !  不拦截指定的规则,拦截除此之外的所有类的方法】 -->
27 <aop:pointcut expression="!execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>28 <!-- 注意not前必须有空格 -->
29 <aop:pointcut expression=" not execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>

2、实例


原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/11823849.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

原文地址:https://www.cnblogs.com/dshore123/p/11823849.html

时间: 2024-10-09 12:19:01

Java进阶知识22 Spring execution 切入点表达式的相关文章

Java进阶知识23 Spring对JDBC的支持

1.最主要的代码 Spring 配置文件(beans.xml) 1 <!-- 连接池 --> 2 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 3 <!-- 注册驱动 --> 4 <property name="driverClass" value="com.mysql.jdbc.Driver&q

zbb20181012 spring,aop,execution切入点表达式

execution切入点表达式 Spring AOP 用户可能会经常使用 execution切入点指示符.执行表达式的格式如下:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)除了返回类型模式(上面代码片断中的ret-type-pattern),名字模式和参数模式以外, 所有的部分都是可选的.返回类型模式决定了方法的返

必备技能:spring aop 切入点表达式,你都会么?

本文主要介绍spring aop中9种切入点表达式的写法 execute within this target args @target @within @annotation @args 1.execute表达式 拦截任意公共方法 execution(public * *(..)) 拦截以set开头的任意方法 execution(* set*(..)) 拦截类或者接口中的方法 execution(* com.xyz.service.AccountService.*(..)) 拦截Account

Spring AOP 切入点表达式使用

1.切入点表达式 1)匹配类型 用于匹配哪些类型的方法启用方面组件,语法格式如下 within(类型) --匹配容器中HibernateCostDaoImpl的所有方法 within(com.tarena.dao.HibernateCostDaoImpl) --匹配com.tarena包下所有类的所有方法 within(com.tarena.*) --匹配com.tarena包及子包的所有类的所有方法 within(com.tarena..*) 2)匹配方法 用于匹配哪些方法启用方面组件,语法格

Spring的切入点表达式

@PointCut切入点表达式语法格式是:execution(访问权限 返回值类型 方法全限定名(参数类型列表)) 限定符: *: 1)匹配某全类名下,任意或多个方法: 表示匹配com.zdc.aop.Calculator下以a打头的任意方法.并且返回值和两个参数都是int类型. execution(public int com.zdc.aop.Calculator.a*(int, int))       表示匹配com.zdc.aop.Calculator下的任意方法.并且返回值和两个参数都是

Java进阶知识

常见异常: 空指针异常NullPointerException,调用了未经初始化的对象或不存在的对象,或访问或修改了null对象的属性或方法; 找不到类名异常ClassNotFoundException,的确不存在,开发环境进行了调整或,如类的根目录结构.编译运行时发生变化的等; 类名不合法异常IllegalAgreementException,向方法传递了不合法或不正确的参数: 输入不匹配异常InputMismatchException,由scanner抛出表获取内容与期望类型的模式不一致或内

Spring execution 表达式

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)除了返回类型模式(上面代码片断中的ret-type-pattern),名字模式和参数模式以外,所有的部分都是可选的. 返回类型模式决定了方法的返回类型必须依次匹配一个连接点. 你会使用的最频繁的返回类型模式是 *,它代表了匹配任意的返回类型. 一个全称限定的类型名将只会匹

Spring切入点表达式常用写法

自从使用AspectJ风格切面配置,使得Spring的切面配置大大简化,但是AspectJ是另外一个开源项目,其规则表达式的语法也稍稍有些怪异. 下面给出一些常见示例的写法: 比如,下面是一个对Service包上所有方法的切面配置 <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* *..service*..*(..))"/> <aop:adv

Spring实战3:装配bean的进阶知识

主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expression Language 在装配bean—依赖注入的本质一文中,我们探讨了Spring的三种管理bean的方式:自动装配.基于JavaConfig.基于XML文件.这篇文字将探讨一些Spring中关于bean的管理的高级知识,这些技能你可能不会每天都用,但是非常重要. 3.1 Environments