在使用Spring AOP的过程中,经常需要使用到各种不同的JoinPoint的定义,Spring AOP遵循了AspectJ形式的JoinPoint的定义形式,但是Spring目前只支持部分的AspectJ形式的Joinpoint的定义,同时Spring AOP只支持方法级别的JoinPoint。以下是我在学习Spring开发者手册时总结的一些JoinPoint的定义,不完整,欢迎补充。
execution | 方法签名需要满足execution中描述的方法签名 |
within | 包或者类型满足within中描述的包或者类型的类的所有非私有方法 |
this | Spring AOP 的代理实例的类型满足this中的描述的类型 |
target | 业务实例对象(非代理实例)的类型满足target 中的描述的类型 |
args | 方法的参数满参数类型为args中描述的类型 |
@target | 类型拥有@target描述中给出的annotation |
@args | 方法运行时传入的参数的实际类型拥有@args描述中给出的annotation |
@within | 类型拥有@target描述中给出的annotation,其中@target和@within的区别在于@within要求的annotation的级别为CLASS,而@target为RUNTIME |
@annotation | 方法拥有@annotation 描述中给出的annotation |
bean(idOrNameOfBean) | bean的名字或者为bean描述中的名字或者Id |
在使用Spring AOP中用的最多的应该是execution 形式的定义了,以下为它的定义格式:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)
带?号的即为可选的,别的必须给出.
以下给出一些JointPoint的例子:
匹配任意的公共方法
execution(public * *(..))
匹配任意方法名已set开头的方法
execution(* set*(..))
匹配任意AccountService接口中的方法
execution(* com.xyz.service.AccountService.*(..))
匹配任意AccountService接口中的方法
execution(* com.xyz.service.AccountService.*(..))
匹配任意service包中任意类型中的方法
execution(* com.xyz.service.*.*(..))
匹配任意service包或者service的子包中任意类型中的方法
execution(* com.xyz.service..*.*(..))
匹配任意service包中任意类型中的方法
within(com.xyz.service.*)
匹配任意service包或者service的子包中任意类型中的方法
within(com.xyz.service..*)
匹配任意实现了AccountService接口的Spring AOP代理对象的任意方法
this(com.xyz.service.AccountService)
匹配任意实现了AccountService接口的实际业务对象的任意方法
this(com.xyz.service.AccountService)
匹配任意一个接收一个参数,并且运行时参赛类型为Serializable的方法
args(java.io.Serializable)
匹配拥有@Transactional annotation类型的任意方法
@target(org.springframework.transaction.annotation.Transactional)
匹配拥有@Transactional annotation类型的任意方法
@within(org.springframework.transaction.annotation.Transactional)
匹配拥有@Transactional annotation的方法
@annotation(org.springframework.transaction.annotation.Transactional)
匹配任意一个接收一个参数,并且运行时参赛类型拥有@Classified annotation的方法
@args(com.xyz.security.Classified)
匹配bean的Id或者名字为tradeService的任意方法
bean(tradeService)
匹配bean的Id或者名字以Service结尾的任意方法
bean(*Service)
分享到:
相关推荐
标题中的“在自定义Spring AOP中使用EL获取拦截方法的变量值”指的是在Spring的面向切面编程(AOP)中,通过Expression Language(EL,表达式语言)来访问被拦截方法的局部变量值。这通常涉及到Spring的代理机制、...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理等,这些关注点可以独立于业务逻辑进行管理。Spring AOP提供了基于XML配置的元数据方式来实现切面,这被称为...
4. **丰富的切入点表达式语言**:Spring AOP支持使用SpEL(Spring Expression Language)来定义复杂的切入点表达式,这让开发者能够更加灵活地控制通知的触发条件。 #### 四、Spring AOP的实现示例 接下来,我们...
在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说,我们会使用通配符来匹配多个类和方法,但在某些情况下,可能需要精确地指定要拦截的类和方法。 ```xml <!-- Spring.xml 配置文件 --> <aop:...
如果采用 XML 方式,则需要在 Spring 配置文件中定义切面、通知和切点: ```xml <aop:config> <aop:aspect id="loggingAspect" ref="loggingAspectBean"> <aop:before method="logBefore" pointcut="execution(* ...
在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...
2. **XML配置驱动**:在Spring配置文件中定义切面、通知和切入点表达式。 **Spring AOP示例** 以入门级的`advice`为例,我们可能有一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect ...
在Spring AOP中,我们使用`@Before`注解来定义一个前置通知。这个注解需要与一个方法关联,该方法将在目标方法执行前被调用。例如: ```java @Aspect public class LoggingAspect { @Before("execution(* ...
在这个基于配置文件的实现中,我们首先需要在Spring配置文件(如applicationContext.xml)中定义一个切面。切面通常由一个或多个通知组成,我们可以使用`<aop:config>`标签来声明切面。例如: ```xml <aop:config> ...
压缩包中的"aop"文件可能包含了一个简单的Spring AOP示例项目,包括了上述两种实现方式的源代码和配置文件。下载后,可以直接运行以观察AOP如何工作。 总结来说,Spring AOP提供了一种强大的方式来实现横切关注点,...
接下来,我们需要编写一个切面类,比如`PerformanceMonitoringAspect`,在这个类中定义通知方法,该方法会在带有`@PerformanceMonitor`的方法执行前后被调用。 ```java @Aspect public class ...
1. **XML配置**:在`<aop:config>`标签中定义切面,`<aop:advisor>`定义通知,`<aop:pointcut>`定义切入点。 2. **注解驱动**:使用`@Aspect`注解声明切面类,`@Before`、`@After`、`@Around`、`@AfterReturning`、...
在描述中提到的问题,用户在尝试使用Spring AOP的注解`@Aspect`时遇到了没有提示的情况。这通常是因为缺少了相关的jar包依赖。Spring AOP的实现离不开Spring核心库以及AOP联盟(AOP Alliance)的jar包。在Spring 3.2...
在Spring 2.0及更高版本中,推荐使用AspectJ注解或XML配置定义切入点表达式。 总结,Spring AOP提供了一种优雅的方式,让我们能够分离关注点,实现代码的模块化,提高可维护性和复用性。理解并熟练运用这些概念和...
在Spring AOP中,如果你需要更强大的切面表达式或者类型安全的切点匹配,那么AspectJ Weaver就是必不可少的。它能够读取和修改字节码,使得在运行时可以动态地插入切面代码,即使是在编译时没有被AspectJ编译的类上...
**Spring AOP**(面向切面编程)是Spring框架中的一个重要组成部分,它通过预定义的切入点来分离关注点,使得核心业务逻辑更加清晰,同时能够方便地管理诸如日志记录、性能统计、安全控制、事务处理等横切关注点。...
在Spring AOP中,我们可以使用注解或者XML配置来定义切面。以注解为例,`@Aspect`注解用于定义一个切面类,`@Before`、`@After`、`@Around`、`@AfterReturning`和`@AfterThrowing`分别代表在方法执行前、后、前后...
在Spring AOP中,我们通过切点(Pointcut)来定义关注点发生的位置,然后通过通知(Advice)来定义关注点应该如何执行。 Spring AOP的注解版主要包括以下几个核心注解: 1. `@Aspect`:标记一个类为切面类,这个类...
在Spring XML配置文件中,你可以定义切面,指定切入点表达式,并配置相应的通知。例如,你可以定义一个名为`loggingAspect`的切面,包含一个在所有`com.example.service.*`包下的方法执行前执行的前置通知。 ```...