`

Pointcut 介面

阅读更多
来源:http://blog.sina.com.cn/s/blog_3ff3946a01009k95.html
Spring是根据类别名称与方法名称来定义Pointcut(具体的时间),当呼叫的类别与方法名称符合Pointcut的定义时,将Advice(aspect的实例)缝合至应用程式上以提供服务。
Spring的Pointcut是透过实作org.springframework.aop.Pointcut介面来实现,其定义如下:
package org.springframework.aop;
public interface Pointcut {
    ClassFilter getClassFilter();
    MethodMatcher getMethodMatcher();
    Pointcut TRUE = TruePointcut.INSTANCE;
}
Pointcut.TRUE是Pointcut介面的简单实作,它传回的ClassFilter是ClassFilter.TRUE,而传回的MethodMatcher是传回MethodMatcher.TRUE。
ClassFilter介面决定了一个类别是否要应用Advice,其定义如下所示:
package org.springframework.aop;
public interface ClassFilter {
    boolean matches(Class clazz);
    ClassFilter TRUE = TrueClassFilter.INSTANCE;
}
matches()方法中要决定传入的类别是不是符合Pointcut的定义,ClassFilter.TRUE是ClassFilter介面的简单实作,它的matches()方法总是传回true,如果您想要建立的Pointcut只考虑到方法名称,则可以使用这个方法。
而MethodMatcher决定了某个方法是否要应用Advice,其定义如下所示:
package org.springframework.aop;
import java.lang.reflect.Method;
public interface MethodMatcher {
    boolean matches(Method method, Class targetClass);
    boolean isRuntime();
    boolean matches(Method method,
                       Class targetClass, Object[] args);
    MethodMatcher TRUE = TrueMethodMatcher.INSTANCE;
}
matches()方法决定了某个类别的某个方法是否符合Pointcut定义,有两个版本,第一个版本使用于静态Pointcut,像是 NameMatchMethodPointcutAdvisor 、 RegExpMethodPointcutAdvisor,第一个方法总是会被执行,如果是静态Pointcut,则isRuntime()会传回 false,此时第二个matches()方法不会被执行,只有在isRuntime()为true时,第二个版本的matches()才会被执行,例如 ControlFlowPointcut 。
MethodMatcher.TRUE是MethodMatcher的简单实作,它的第一个版本的matches()总是传回true, isRuntime()总是传回false,表示静态Pointcut,所以您不可以呼叫第二个版本的matches()方法,否则就会丢出 UnsupportedOperationException 例外。
分享到:
评论

相关推荐

    开源框架 Spring Gossip

    NameMatchMethodPointcutAdvisor RegExpMethodPointcutAdvisor ControlFlowPointcut Pointcut 介面 Pointcut 交集、联集操作 Introduction 为特殊的 Advice,它影响的不是方法的流程,...

    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

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

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

    Spring AOP Example – Pointcut , Advisor

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

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

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

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

    ### Pointcut表达式and、or、not在XML中的配置详解 #### 一、前言 在Spring AOP框架中,Pointcut(切入点)是AOP的核心概念之一,它定义了哪些Joinpoint(连接点)会被通知(Advice)所影响。在实际开发过程中,...

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

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

    如何使用Spring Boot的@Pointcut注解

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

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

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

    切点(Pointcut)(处理方案).md

    切点(Pointcut)(处理方案).md

    Spring AOP配置源码

    <aop:after-throwing method="exception" pointcut-ref="pointCut"/> aop异常通知 以上结合起来意思就是在调用com.spring.service包或子包下的所有方法之前或之后或抛出异常时依次调用id为logIntercepter的类中的...

    基于java的企业级应用开发:AspectJ开发.ppt

    <aop:after-returning method="myAfterReturning" pointcut-ref="myPointCut" returning="returnVal" /> <aop:around method="myAround" pointcut-ref="myPointCut" /> ...

    JavaEE源代码 Spring_Pointcut

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

    java中的0 can‘t find referenced pointcut runTim

    解决方法 后来经过排查,发现是自己的写法有问题,在@Around的参数中我们使用的是runtime(),这里是有问题的! @Around: 环绕增强,相当于MethodInterceptor. 这里Around的value参数应该写的是上面的签名,而不是...

    SpringBoot中的AOP+自定义注解(源代码)

    1.2 `@Pointcut` 创建切入点 1.3 通知 1.4 Spring AOP 和 AspectJ AOP 有什么区别? 2. 在 SpringBoot 中使用 Aop 功能 2.0 创建一个SpringBoot项目 2.1 引入 POM 依赖 2.1.1 引入springboot aop依赖 2.1.2 引入...

    spring学习之六“AOP使用spring静态配置文件的实现”

    - **切面(Aspect)**:包含关注点(pointcut)和通知(advice)的模块化单元。 - **通知(Advice)**:在特定连接点执行的代码,如前置通知、后置通知、异常通知等。 - **连接点(Join Point)**:程序执行过程...

    Spring中的AOP不生效

    1. **确认是否正确配置了AOP切面**:检查AOP配置文件或类中的所有配置项是否设置正确,包括切入点表达式(Pointcut)、通知类型(Advice)等。 2. **检查Service类是否被Spring管理**:确保受影响的Service类已经...

    Spring AOP demo

    <aop:before method="beforeMethod" pointcut-ref="pointcut1"/> <aop:around method="aroundMethod" pointcut-ref="pointcut2"/> ``` Java 类 ```java public class LoggingAspect { public void ...

    Spring AOP中文教程

    AOP的核心概念包括advice、pointcut和advisor。 1. Advice:Advice是实际执行的代码,即你要插入到主程序中的额外逻辑。在Spring AOP中,Advice可以是before、after、around等类型,分别在目标方法执行前、执行后或...

    AspectJ 文档

    总的来说,AspectJ为Java提供了一种声明式方式来实施横切关注点,通过连接点、Pointcut和Advice的组合,开发者可以将切面逻辑与核心业务逻辑分离,从而提高代码的模块化和可维护性。AspectJ的这些特性使得它在大型...

Global site tag (gtag.js) - Google Analytics