`

spring切点表达式写法

阅读更多
本文转自:http://blog.csdn.net/mike8785/archive/2010/04/02/5444265.aspx
自从使用AspectJ风格切面配置,使得Spring的切面配置大大简化,但是AspectJ是另外一个开源项目,其规则表达式的语法也稍稍有些怪异。
下面给出一些常见示例的写法:
比如,下面是一个对Service包上所有方法的切面配置
<aop:config>
<aop:pointcut id="serviceOperation"
expression_r="execution(* *..service*..*(..))"/>
<aop:advisor pointcut-ref="serviceOperation"
advice-ref="txAdvice"/>
</aop:config>

表达式所处位置如上pointcut的位置。
配置这个为了更好控制切面上的事务,下面是一个事物配置的简单例子:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" rollback-for="Exception"/>
<tx:method name="save*" rollback-for="Exception"/>
<tx:method name="update*" rollback-for="Exception"/>
<tx:method name="*" read-only="true" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>

通过切面、通知的配置,就为所有的delete/save/update开头的方法添加上了一致性事务,对其他方法添加上了只读事务。
这个还不够细,如果要写更为详细的控制,就需要研究AspectJ切点配置的语法了,其实研究这些标准,还不如拿几个例子看看,解决实际问题就行了。就像写正则表达式一样,标准明摆着,要写好却不容易,从例子着手就能快速上手和领悟。
以下文档来自Spring中文开发指南2.5文档,由满江红开源组织翻译:
Spring AOP 用户可能会经常使用 execution切入点指示符。执行表达式的格式如下:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)除了返回类型模式(上面代码片断中的ret-type-pattern),名字模式和参数模式以外,所有的部分都是可选的。返回类型模式决定了方法的返回类型必须依次匹配一个连接点。你会使用的最频繁的返回类型模式是*,它代表了匹配任意的返回类型。一个全限定的类型名将只会匹配返回给定类型的方法。名字模式匹配的是方法名。 你可以使用*通配符作为所有或者部分命名模式。参数模式稍微有点复杂:()匹配了一个不接受任何参数的方法, 而(..)匹配了一个接受任意数量参数的方法(零或者更多)。 模式(*)匹配了一个接受一个任何类型的参数的方法。模式(*,String)匹配了一个接受两个参数的方法,第一个可以是任意类型,第二个则必须是String类型。更多的信息请参阅AspectJ编程指南中 语言语义的部分。
下面给出一些通用切入点表达式的例子。
任意公共方法的执行:
execution(public * *(..))任何一个名字以“set”开始的方法的执行:
execution(* set*(..))AccountService接口定义的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))在service包中定义的任意方法的执行:
execution(* com.xyz.service.*.*(..))在service包或其子包中定义的任意方法的执行:
execution(* com.xyz.service..*.*(..))在service包中的任意连接点(在Spring AOP中只是方法执行):
within(com.xyz.service.*)在service包或其子包中的任意连接点(在Spring AOP中只是方法执行):
within(com.xyz.service..*)实现了AccountService接口的代理对象的任意连接点 (在Spring AOP中只是方法执行):
this(com.xyz.service.AccountService)'this'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得代理对象在通知体内可用。
实现AccountService接口的目标对象的任意连接点 (在Spring AOP中只是方法执行):
target(com.xyz.service.AccountService)'target'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得目标对象在通知体内可用。
任何一个只接受一个参数,并且运行时所传入的参数是Serializable 接口的连接点(在Spring AOP中只是方法执行)
args(java.io.Serializable)'args'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得方法参数在通知体内可用。
请注意在例子中给出的切入点不同于 execution(* *(java.io.Serializable)): args版本只有在动态运行时候传入参数是Serializable时才匹配,而execution版本在方法签名中声明只有一个 Serializable类型的参数时候匹配。
目标对象中有一个 @Transactional 注解的任意连接点 (在Spring AOP中只是方法执行)
@target(org.springframework.transaction.annotation.Transactional)'@target'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
任何一个目标对象声明的类型有一个 @Transactional 注解的连接点 (在Spring AOP中只是方法执行):
@within(org.springframework.transaction.annotation.Transactional)'@within'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
任何一个执行的方法有一个 @Transactional 注解的连接点 (在Spring AOP中只是方法执行)
@annotation(org.springframework.transaction.annotation.Transactional)'@annotation'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
任何一个只接受一个参数,并且运行时所传入的参数类型具有@Classified 注解的连接点(在Spring AOP中只是方法执行)
@args(com.xyz.security.Classified)'@args'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
任何一个在名为'tradeService'的Spring bean之上的连接点 (在Spring AOP中只是方法执行):
bean(tradeService)任何一个在名字匹配通配符表达式'*Service'的Spring bean之上的连接点 (在Spring AOP中只是方法执行):
bean(*Service)

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mike8785/archive/2010/04/02/5444265.aspx
分享到:
评论

相关推荐

    详解Spring 框架中切入点 pointcut 表达式的常用写法

    下面将详细解释Spring框架中切入点表达式的常用写法。 1. **execution()指示符**: - `execution()`是Spring中最常用的切入点指示符,用于匹配方法执行。 - 语法结构:`execution(modifiers-pattern? ret-type-...

    spring spEL 表达式详解

    **Spring SpEL(Spring Expression Language)表达式详解** Spring Expression Language,简称SpEL,是Spring框架中的一个强大表达式语言,用于在运行时查询和操作对象图。它提供了丰富的表达式语法,支持属性访问...

    spring表达式

    本文档是一个spring aop的切点表达式的实例,通俗易懂。

    Spring AOP中定义切点的实现方法示例

    Spring AOP 中定义切点的实现方法示例 在 Spring 框架中,Aspect-Oriented Programming(面向切面编程)是一种非常重要的编程范式,它能够帮助开发者实现各种横切关注点的模块化。其中,定义切点是 AOP 中最为关键...

    【Spring AOP】@Aspect结合案例详解(二): @Pointcut使用@within和within

    上文我们已讲完五种通知Advice注解,所以从本文开始介绍@Pointcut切点表达式,虽然Spring AOP的切点表达式尚未 全部实现 @AspectJ 的切点指示符,但是也已经足够多和灵活,本文主要介绍@Pointcut切点表达式中的@...

    day39-Spring 06-Spring的AOP:带有切点的切面

    在"day39-Spring 06-Spring的AOP:带有切点的切面"这个主题中,我们将深入探讨如何在Spring中实现带有切点的切面,以及它们如何与源码和工具结合使用。 首先,理解AOP的基本概念非常重要。AOP的核心是切面(Aspect...

    跟我学Spring3(6.5)AspectJ切入点语法详解

    总结来说,本章节的重点在于理解AspectJ切入点语法,包括切点表达式和切点定义的概念,以及如何将通知与切点关联,以实现面向切面编程。通过掌握这些知识,您将能够利用Spring3的AOP功能,编写更加高效和整洁的Java...

    在自定义spring aop中使用el获取拦截方法的变量值。

    标题中的“在自定义Spring AOP中使用EL获取拦截方法的变量值”指的是在Spring的面向切面编程(AOP)中,通过Expression Language(EL,表达式语言)来访问被拦截方法的局部变量值。这通常涉及到Spring的代理机制、...

    【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知

    本文带来的案例是:打印Log,主要介绍@Pointcut切点表达式的@annotation方式,以及 五种通知Advice注解:@Before、@After、@AfterRunning、@AfterThrowing、@Around。 本资源是@Pointcut使用@annotation的方式,结合...

    SpringAOP测试Demo

    在Spring AOP中,切面通常由一个或多个注解的类组成,这些类定义了切点表达式和通知。 2. **切点(Pointcut)**:切点是程序执行过程中的特定位置,例如方法的调用、异常的抛出等。在Spring AOP中,我们使用切点...

    AOP_execution.zip

    在Java中,通常使用Spring框架来实现AOP,而切点表达式则是由Spring的`@AspectJ`注解配合`@Pointcut`注解来定义的。`execution()`是Spring AOP中用于指定方法匹配规则的内置函数,用于定义执行点。 例如,描述中...

    Spring第八节课.pdf

    总结来说,本课程主要涵盖了Spring框架中AOP的核心概念和应用,包括切点表达式的定义、五种类型的通知及用法,以及基于XML和注解的AOP配置方法。通过实例演示了如何在Spring应用中集成AOP功能,并通过实际操作加深了...

    Spring 使用AspectJ 实现 AOP(基于xml文件、基于注解)

    2. **定义切点表达式**: 在XML配置文件中,我们使用`&lt;aop:config&gt;`标签定义切点表达式,这些表达式匹配要拦截的方法。 3. **关联通知与切点**: 使用`&lt;aop:pointcut&gt;`定义切点,并通过`&lt;aop:advisor&gt;`将通知与切点...

    SpringAOP.rar_springAOP

    Spring AOP允许我们定义切点表达式,精确地指定何时应用通知。 二、Spring AOP的核心组件 2.1 切面 切面是包含通知和切点的逻辑单元。在Spring中,可以通过注解或XML配置来定义切面。 2.2 通知类型 - 前置通知...

    spring aop jar 包

    切点通过切点表达式来定义,表达式通常基于方法签名,如方法名、参数类型等。 4. **连接点(Join Point)**:连接点是切点在实际运行时的实例,比如一个具体的方法调用。 5. **织入(Weaving)**:织入是将切面...

    Spring_Annotation_AOP

    8. **切点(Pointcut)**: 切点是实际插入通知的特定连接点,通常由一个切点表达式定义。 9. **切面(Aspect)**: 切面是通知和切点的组合,定义了一个关注点的模块化。 在实际应用中,Spring的注解驱动AOP能够极...

    Spring实现AOP的多种方式 切点函数

    里面包括4个例子:(1)Spring实现AOP方式之一:基于XML配置的Spring AOP (2)Spring实现AOP方式之二:使用注解配置 Spring AOP (3)Spring AOP : AspectJ Pointcut 切点 (4)Spring AOP : Advice 声明 (通知注解)

    spring - 副本.zip

    切点表达式是Spring AOP的核心,它定义了通知的执行时机。上述例子中的`pointcut`属性就是切点表达式,如`execution(* com.example.service.*.*(..))`表示匹配所有在`com.example.service`包下的任何类的所有公共...

    spring aop依赖jar包

    - `spring-expression.jar`(可能需要):Spring表达式语言(SpEL),用于在运行时查询和操作对象图。 在使用这些jar包时,你需要确保它们都在你的项目类路径(ClassPath)下。如果你使用Maven或Gradle等构建工具,...

    尚硅谷佟刚Spring4代码及PPT.rar

    Bean、通过 FactoryBean 配置 Bean、通过注解配置 Bean、泛型依赖注入、AOP 基础、前置通知、后置通知、返回通知、异常通知、环绕通知、切面的优先级、切点表达式、使用 XML 文件的方式配置 AOP、使用 JdbcTemplate ...

Global site tag (gtag.js) - Google Analytics