转:http://www.redsaga.com/spring_ref/2.0/html/aop.html#d0e7684
6.2.3.4. 示例
Spring AOP 用户可能会经常使用 execution pointcut designator。执行表达式的格式如下:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
除了返回类型模式(上面代码片断中的ret-type-pattern),名字模式和参数模式以外,所有的部分都是可选的。 返回类型模式决定了方法的返回类型必须依次匹配一个连接点。 你会使用的最频繁的返回类型模式是 *,它代表了匹配任意的返回类型。 一个全称限定的类型名将只会匹配返回给定类型的方法。名字模式匹配的是方法名。 你可以使用 * 通配符作为所有或者部分命名模式。 参数模式稍微有点复杂:() 匹配了一个不接受任何参数的方法, 而 (..) 匹配了一个接受任意数量参数的方法(零或者更多)。 模式 (*) 匹配了一个接受一个任何类型的参数的方法。 模式 (*,String) 匹配了一个接受两个参数的方法,第一个可以是任意类型,第二个则必须是String类型。 请参见AspectJ编程指南的 Language Semantics 部分。
下面给出一些常见切入点表达式的例子。
任意公共方法的执行:
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'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得代理对象可以在通知体内访问到的部分。
实现了 AccountService 接口的目标对象的任意连接点(在Spring AOP中只是方法执行) :
target(com.xyz.service.AccountService)
'target'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得目标对象可以在通知体内访问到的部分。
任何一个只接受一个参数,且在运行时传入的参数实现了 Serializable 接口的连接点 (在Spring AOP中只是方法执行)
args(java.io.Serializable)
'args'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得方法参数可以在通知体内访问到的部分。
请注意在例子中给出的切入点不同于 execution(* *(java.io.Serializable)): args只有在动态运行时候传入参数是可序列化的(Serializable)才匹配,而execution 在传入参数的签名声明的类型实现了 Serializable 接口时候匹配。
有一个 @Transactional 注解的目标对象中的任意连接点(在Spring AOP中只是方法执行)
@target(org.springframework.transaction.annotation.Transactional)
'@target' 也可以在binding form中使用:请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。
任何一个目标对象声明的类型有一个 @Transactional 注解的连接点(在Spring AOP中只是方法执行)
@within(org.springframework.transaction.annotation.Transactional)
'@within'也可以在binding form中使用:- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。
任何一个执行的方法有一个 @Transactional annotation的连接点(在Spring AOP中只是方法执行)
@annotation(org.springframework.transaction.annotation.Transactional)
'@annotation' 也可以在binding form中使用:- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。
任何一个接受一个参数,并且传入的参数在运行时的类型实现了 @Classified annotation的连接点(在Spring AOP中只是方法执行)
@args(com.xyz.security.Classified)
分享到:
相关推荐
Maven 插件 Spring Boot Maven Plugin Spring Boot Maven Plugin 是一个 Maven 插件,用于简化 Spring Boot 项目的构建和打包过程。该插件提供了许多有用的功能,例如重新打包可执行的存档、自定义层配置、继承 ...
### Spring 2.x 配置详解 #### 关于 Spring 配置 自 Spring 2.0 起,推荐使用基于 XML Schema 的配置方式,这种方式比传统的 DTD 基础配置更为灵活。一个典型的 Spring 2.5 配置文件至少会包含以下结构: ```xml ...
例如,如果我们要拦截所有Struts2的Action方法,切入点表达式可能是`execution(* com.example.struts2.action.*.*(..))`。 4. **连接Struts2和Spring**:在Struts2的配置文件(如`struts.xml`)中,我们需要配置...
该项目是一个典型的由Spring Cloud管理的微服务项目,主要包括如下模块 micro-service-cloud─────────────────顶层项目 ├──cloud-service-core───────────────基础核心模块 ├...
Spring和Struts2的整合需要相关的jar包,包括Spring的核心库、Struts2的核心库以及Spring的Struts2插件库。确保所有必要的依赖都被正确地添加到项目的类路径中,这是项目能正常运行的基础。 然后,我们转向AOP的...
2. 创建一个实现了`Printer`接口的具体打印机类,例如`ConcretePrinter`。 3. 使用`@Component`注解标记`ConcretePrinter`,将其注册到Spring容器中。 4. 定义一个切面类,包含切面逻辑,比如`PrintingAspect`,并...
Chapter 8 - Messaging, emailing, asynchronous method execution, and caching using Spring Chapter 9 - Aspect-oriented programming Chapter 10 – Spring Web MVC basics Chapter 11 – Validation and data ...
2. **创建切面类**:创建一个Java类,并使用`@Aspect`注解标记为切面。这个类可以包含一个或多个通知方法,这些方法通过其他注解(如`@Before`, `@After`, `@Around`, `@AfterReturning`, `@AfterThrowing`)来定义...
在IT行业中,Spring框架是Java开发中的一个核心组件,它为构建企业级应用程序提供了全面的解决方案。Spring框架以其模块化、灵活的设计和丰富的功能而受到广大开发者喜爱。当我们深入研究Spring框架的源码时,了解其...
- **Task Execution and Scheduling:** Spring 支持任务执行和调度功能。 - **动态语言支持:** Spring 支持 Groovy、Ruby 等动态语言的集成。 以上是 Spring Framework 3.0 的核心知识点,涵盖了框架的主要特性和...
5. **Asynchronous Processing**:Spring对异步处理的支持,包括Task Execution和Task Scheduling,可以用来创建后台任务和定时任务。 6. **Spring Boot**:这是一个快速开发工具,基于Spring Framework,简化了...
2. **引入Spring配置文件**:接着,在Spring的配置文件中引入AOP约束。 3. **编写目标类**:创建需要增强的目标类(如ProductDao)。 4. **配置目标类**:在Spring配置文件中配置目标类。 5. **开启AOP注解自动代理*...
在Spring框架中,Aspect是面向切面编程(AOP)的核心概念,它允许我们将关注点分离,比如日志、事务管理等,从主...在学习和使用过程中,可以通过`springaoptest1`和`springaoptest2`这两个文件进行实践操作,加深理解。
这个特性主要通过Spring的Task Execution和Scheduling模块来实现,可以方便地集成到任何Spring应用中。下面我们将深入探讨如何在Spring中配置自动执行的方法。 1. **Spring Task Execution and Scheduling** ...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
2. CGLIB代理: - 如果目标对象没有实现任何接口,Spring会使用CGLIB库来创建代理。CGLIB是一个强大的代码生成库,它可以为一个类创建子类并重写其方法,从而实现动态代理。 - CGLIB代理比JDK代理更灵活,因为它不...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,通过在程序运行时动态地将代码插入到方法调用中,来实现跨切面的关注点,如日志记录、性能监控、事务管理等。而Spring...
2. **检查Service类是否被Spring管理**:确保受影响的Service类已经被Spring容器管理,即Service类上已经添加了`@Component`、`@Service`等注解。 3. **确认代理模式**: - **使用默认的JDK动态代理**:如果采用...
当用户触发某个特定的操作时,Spring Web Flow会启动一个“Flow Execution”,即执行具体的业务流程。Flow Execution负责管理整个Flow的生命周期,包括状态维护、数据传递等。 ### 架构原理 Spring Web Flow采用了...
2. **aspectjweaver-1.7.4.jar**:AspectJ Weaver是AspectJ的编织器,负责在运行时将切面织入到目标类中。这意味着即使没有重新编译,也可以动态地在已加载的类上应用切面。这个组件使得Spring AOP能够与未修改的第...