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代理

原文地址:https://www.cnblogs.com/liweixml/p/11789208.html

时间: 2024-12-13 06:33:00

spring expression切点表达式的相关文章

Spring Aop 切点表达式

在Spring AOP 中,通常需要借助AspectJ 的切点表达式语言来定义切点.重要的是Spring 中仅支持AspectJ切点指示器的一个子集. Spring 支持的AspectJ的切点指示器 AspectJ 指示器 描述 args() 限制连接点匹配参数为执行类型的执行方法 @args() 限制连接点匹配参数由执行注解标注的执行方法 execution() 匹配连接点的执行方法 this() 限制连接点匹配AOP代理的Bean引用类型为指定类型的Bean target() 限制连接点匹配

Spring AOP切点表达式用法总结

1. 简介 面向对象编程,也称为OOP(即Object Oriented Programming)最大的优点在于能够将业务模块进行封装,从而达到功能复用的目的.通过面向对象编程,不同的模板可以相互组装,从而实现更为复杂的业务模块,其结构形式可用下图表示: 面向对象编程解决了业务模块的封装复用的问题,但是对于某些模块,其本身并不独属于摸个业务模块,而是根据不同的情况,贯穿于某几个或全部的模块之间的.例如登录验证,其只开放几个可以不用登录的接口给用户使用(一般登录使用拦截器实现,但是其切面思想是一致

使用注解匹配Spring Aop切点表达式

Spring中的类基本都会标注解,所以使用注解匹配切点可以满足绝大部分需求 主要使用@within()/@target @annotaton() @args()等... 匹配@Service类中的所有方法: @within(org.springframework.stereotype.Service) 或 @target(org.springframework.stereotype.Service) 匹配标注了@RequestMapping的所有方法 @annotation(org.spring

Spring AOP 切点(pointcut)表达式

这遍文章将介绍Spring AOP切点表达式(下称表达式)语言,首先介绍两个面向切面编程中使用到的术语. 连接点(Joint Point):广义上来讲,方法.异常处理块.字段这些程序调用过程中可以抽像成一个执行步骤(或者说执行点)的单元.从Spring AOP来讲,就是指java的方法和异常处理代码块. 切点(Pointcut):是连接点的描述定义,Spring AOP通过切点来定位到哪些连接点.切点表达式语言就是切点用来定义连接点的语法. 切点指示符 切点指示符是切点定义的关键字,切点表达式以

Spring学习总结(四)——表达式语言 Spring Expression Language

SpEL简介与功能特性 Spring表达式语言(简称SpEL)是一个支持查询并在运行时操纵一个对象图的功能强大的表达式语言.SpEL语言的语法类似于统一EL,但提供了更多的功能,最主要的是显式方法调用和基本字符串模板函数. 同很多可用的Java 表达式语言相比,例如OGNL,MVEL和JBoss EL,SpEL的诞生是为了给Spring社区提供一个可以给Spring目录中所有产品提供单一良好支持的表达式语言.其语言特性由Spring目录中的项目需求驱动,包括基于eclipse的SpringSou

切点表达式定义了拦截类中所有方法,所以每个方法都被增强

1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块被命名为"切面"(Aspect),切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性. 2.DI 和 IOC 概念 依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作,该工作

Spring文档苦读【7】【Spring Expression Language(SpEL)】

简介 Spring Expression Language(Spring表达式语言),用来解析java语言中的相关并获得反馈. 下面就摘录官方示例来简单描述一下.也作一下标记,方便以后查阅. 示例 示例1 1 ExpressionParser parser = new SpelExpressionParser(); 2 Expression exp = parser.parseExpression("'Hello World'"); 3 String message = (String

Other - 04 - AspectJ学习笔记 - 切点表达式

SourceAnalysis - 50 - Spring - AspectJ 这篇的目的也比较直接,今天突然发现同事问到切点表达式发现自己还是不太熟悉 AspectJ 的切点表达式,只知道最简单的 execution 表达式,所以来整理一下一些切点表达式的使用方法,算是插入的一篇文章吧. 首先对于一个切点 pointcut 来说,它分为两个核心部分,第一部分是 joinpoint,第二部分是 pointcut.而切点本身的作用是选择需要被横切的逻辑块,而 before / after 等是 ad

21Spring重用切点表达式

直接看代码: package com.cn.spring.aop.impl; //加减乘除的接口类 public interface ArithmeticCalculator { int add(int i, int j); int sub(int i, int j); int mul(int i, int j); int div(int i, int j); } package com.cn.spring.aop.impl; import org.springframework.stereot