`
zhuruxin86
  • 浏览: 106037 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Spring Pointcut

阅读更多
转自:http://www.iteye.com/topic/141350

在Spring 2.0中,Pointcut的定义包括两个部分:Pointcut表示式(expression)和Pointcut签名(signature)。让我们先看看execution表示式的格式:

java 代码
execution(modifier-pattern?
          ret-type-pattern
          declaring-type-pattern?
          name-pattern(param-pattern)
          throws-pattern?)

括号中各个pattern分别表示修饰符匹配(modifier-pattern?)、返回值匹配(ret-type-pattern)、类路径匹配(declaring-type-pattern?)、方法名匹配(name-pattern)、参数匹配((param-pattern))、异常类型匹配(throws-pattern?),其中后面跟着“?”的是可选项。
在各个pattern中可以使用“*”来表示匹配所有。在(param-pattern)中,可以指定具体的参数类型,多个参数间用“,”隔开,各个也可以用“*”来表示匹配任意类型的参数,如(String)表示匹配一个String参数的方法;(*,String)表示匹配有两个参数的方法,第一个参数可以是任意类型,而第二个参数是String类型;可以用(..)表示零个或多个任意参数。
现在来看看几个例子:
1)execution(* *(..))
表示匹配所有方法
2)execution(public * com. savage.service.UserService.*(..))
表示匹配com.savage.server.UserService中所有的公有方法
3)execution(* com.savage.server..*.*(..))
表示匹配com.savage.server包及其子包下的所有方法
除了execution表示式外,还有within、this、target、args等Pointcut表示式。一个Pointcut定义由Pointcut表示式和Pointcut签名组成,例如:

java 代码
//Pointcut表示式
@Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
//Point签名
private void log(){}                             

然后要使用所定义的Pointcut时,可以指定Pointcut签名,如

java 代码
@Before("og()")

上面的定义等同与:

java 代码
@Before("execution(* com.savage.aop.MessageSender.*(..))")

Pointcut定义时,还可以使用&&、||、!运算,如:

java 代码
@Pointcut("execution(* com.savage.aop.MessageSender.*(..))")
private void logSender(){}

@Pointcut("execution(* com.savage.aop.MessageReceiver.*(..))")
private void logReceiver(){}

@Pointcut("logSender() || logReceiver()")
private void logMessage(){}

这个例子中,logMessage()将匹配任何MessageSender和MessageReceiver中的任何方法。
还可以将一些公用的Pointcut放到一个类中,以供整个应用程序使用,如:

java 代码
package com.savage.aop;

import org.aspectj.lang.annotation.*;

public class Pointcuts {
   @Pointcut("execution(* *Message(..))")
   public void logMessage(){}

   @Pointcut("execution(* *Attachment(..))")
   public void logAttachment(){}

   @Pointcut("execution(* *Service.*(..))")
   public void auth(){}
}

在使用这些Pointcut时,指定完整的类名加上Pointcut签名就可以了,如:

java 代码
package com.savage.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;

@Aspect
public class LogBeforeAdvice {
   @Before("com.sagage.aop.Pointcuts.logMessage()")
   public void before(JoinPoint joinPoint) {
      System.out.println("Logging before " + joinPoint.getSignature().getName());
   }
}

当基于XML Sechma实现Advice时,如果Pointcut需要被重用,可以使用<aop:pointcut></aop:pointcut>来声明Pointcut,然后在需要使用这个Pointcut的地方,用pointcut-ref引用就行了,如:

xml 代码

<aop:config>  
    <aop:pointcut id="log"   
          expression="execution(* com.savage.simplespring.bean.MessageSender.*(..))"/>  
    <aop:aspect id="logging" ref="logBeforeAdvice">  
        <aop:before pointcut-ref="log" method="before"/>  
        <aop:after-returning pointcut-ref="log" method="afterReturning"/>  
    </aop:aspect>  
</aop:config>  








分享到:
评论

相关推荐

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

    在Spring框架中,切入点(pointcut)表达式是AOP(面向切面编程)的核心组成部分,用于定义关注点的精确位置,比如哪些方法应该被拦截。切入点表达式是基于AspectJ语法的,允许开发者精确地指定要拦截的方法。下面将详细...

    Spring aop 配置

    Spring aop 配置 Spring aspect 配置 Spring advisor 配置 Spring pointcut 配置

    Spring AOP Example – Pointcut , Advisor

    本篇文章将详细讲解Spring AOP的实例,包括Pointcut和Advisor两个关键概念,同时结合源码和工具进行深入探讨。 首先,让我们了解什么是Spring AOP。AOP(Aspect-Oriented Programming)是一种编程范式,它允许...

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

    在微服务流行的当下,在使用SpringCloud/Springboot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心!所以本系列就结合案例详细介绍@Aspect方式的切面的...

    JavaEE源代码 Spring_Pointcut

    JavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_PointcutJavaEE源代码 Spring_...

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

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

    如何使用Spring Boot的@Pointcut注解

    ### 如何使用Spring Boot的@Pointcut注解 #### 第一部分:@Pointcut注解简介 在Spring Boot中,@Pointcut注解是AspectJ框架的一部分,用于定义切点(Pointcut)。切点是在应用程序中定义的一组特定方法,当这些方法...

    Java EE,Spring基础及应用-切入点(Pointcut)

    在这篇文章中,我们将深入探讨Spring中的切入点(Pointcut)概念,它是AOP的关键组成部分。 首先,我们要明白什么是AOP。AOP是一种编程范式,它允许程序员定义“方面”——关注点的模块化,这些关注点是跨越多个...

    can't find referenced pointcut

    spring-framework-3.1.1.RELEASE jdk1.7 环境下 can't find referenced pointcut 问题解决 换了对应的jar文件即可 aspectjrt.jar aspectj-1.6.6.jar aspectjweaver.jar

    pointcut表达式and or not在xml中配置

    在Spring AOP框架中,Pointcut(切入点)是AOP的核心概念之一,它定义了哪些Joinpoint(连接点)会被通知(Advice)所影响。在实际开发过程中,我们常常需要对切入点进行更精细的控制,例如只对某些方法或类应用增强...

    spring in action & 精通spring

    6. **AOP模块**:提供了基于代理的AOP实现,可以定义切点(Pointcut)、通知(Advice)、切面(Aspect)等,实现对代码的无侵入式增强。 7. **数据访问/集成**:Spring支持JDBC、ORM(如Hibernate、MyBatis)和OXM...

    spring 源码中文注释

    在源码中,`Advisor`、`Pointcut`和`Advice`等接口是描述切面的关键,而`ProxyFactoryBean`或`AspectJAutoProxyCreator`则是创建代理对象的工具。 Spring还提供了大量的模块,如数据访问/集成(DAO)、Web MVC、JMS...

    spring源码分析(1-10)

    Pointcut定义切入点,Advice定义增强处理,Advisor结合两者,Aspect则封装了多个Advisor。 6. **Spring 声明式事务处理**:基于AOP,Spring实现了声明式事务管理。在配置文件中,可以使用@Transactional注解指定...

    Spring AOP配置源码

    &lt;aop:pointcut expression="execution(* com.spring.service..*(..))" id="pointCut"/&gt;声明一个切入点,注意execution表达式的写法 &lt;aop:before method="before" pointcut-ref="pointCut"/&gt; aop前置通知 ...

    spring源码中英文注释

    它在Spring的许多特性中都有应用,例如AOP的pointcut表达式和bean属性的动态设置。 通过深入研究这些源码和注释,开发者不仅可以提升自己的Spring框架技能,还能对Java编程有更深入的理解,尤其是在设计模式和面向...

    Spring-4.3源码

    此外,`@Pointcut`定义了切点表达式,用于匹配方法或类。 Spring 4.3还增强了对Java 8的支持,比如对Lambda表达式的集成,使得与Spring框架的交互更加简洁。例如,你可以使用Lambda表达式来编写事件监听器或者在`@...

    spring-aspects

    Spring AOP通过Pointcut表达式来指定这些点,Pointcut可以理解为匹配连接点的规则。 6. **切点(Pointcut)** 切点是实际匹配连接点的逻辑,定义了哪些方法会受到通知的影响。`@Pointcut`注解用于定义切点,通常...

    spring aop jar 包

    在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知(Advice)**:通知是在特定连接点(Join Point)执行的代码,例如方法调用前、后或者异常发生时。Spring AOP支持五种类型的通知:前置...

    Spring中的AOP不生效

    ### Spring中的AOP不生效的原因及解决方法 在Java开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种重要的编程思想和技术手段,主要用于处理横切关注点问题,如日志记录、性能统计、安全控制、...

    Spring源码解析.zip

    `org.springframework.aop`和`org.springframework.aop.framework`包下的类,如`Advised`、`Advisor`、`Pointcut`和`ProxyFactoryBean`,构成了Spring AOP的基础。通过阅读源码,我们可以学习如何定义切面、切入点...

Global site tag (gtag.js) - Google Analytics