广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java Spring AOP之PointCut案例详解
  • 269
分享到

Java Spring AOP之PointCut案例详解

2024-04-02 19:04:59 269人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、PointCut接口二、ClassFilter接口三、MethodMatcher接口总结一、PointCut接口 package org.springframewor

一、PointCut接口




package org.springframework.aop;


public interface Pointcut {

	
	ClassFilter getClassFilter();

	
	MethodMatcher getMethodMatcher();


	
	Pointcut TRUE = TruePointcut.INSTANCE;

}

源码可知,PointCut接口就是定义了两个元素,ClassFilter和MethodMatcher。PointCut接口就是为了获得这两个元素。换句话说,PointCut的功能,都包含在了这两个元素里。下面看这 两个元素源码。

二、ClassFilter接口




package org.springframework.aop;


@FunctionalInterface
public interface ClassFilter {

	
	boolean matches(Class<?> clazz);


	
	ClassFilter TRUE = TrueClassFilter.INSTANCE;

}

这个接口用来过滤要生成代理的类和给定的类是否匹配。
该接口的实现类应该提供正确的equals()方法和hashCode()方法,以便于能在缓存中使用。例如通过cglib生成的代理对象。(这句话什么意思,不理解)。
matches方法就是判断参数中的class类是否和切点定义的类相匹配。如果匹配,则生成代理对象,如果不匹配,则过滤掉。

三、MethodMatcher接口




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;

}

PointCut的一部分,用来判断方法是否需要进行增强。ClassFilter过滤需要生成代理的类。而这个类里,不是所有的方法都需要增强的,所以要通过MethodMatcher接口匹配出要增强的方法来。
MethodMatcher分为静态匹配和动态匹配。静态匹配是根据方法名匹配。动态匹配是根据参数进行匹配(不知道这么理解对不对)
MethodMatcher的实现类中,如果isRuntime()方法返回false,则使用静态匹配,无论参数是什么,只要方法名匹配,则都会进行增强。而且这个接口中带有3个参数的matches方法,即matches(java.lang.reflect.Method, Class, Object[])就永远不会执行。
实现类中,如果两个参数的matches方法返回true,且isRuntime()也返回true。那么在执行增强之前,会执行三个参数的matches方法,来判断这个增强是否要执行。

下面来看接口三个方法的注释:


boolean matches(Method method, Class<?> targetClass);

静态核对给定的方法是否需要增强。如果返回false。则不再会执行三个参数的matches方法。


boolean isRuntime();

当两个参数的matches方法返回true时,是否要执行三个参数的matches方法。该方法在AOP代理生成的时候执行,而不是每次调用代理方法之前执行。意思就是生成代理对象的时候,就已经判断好要不要执行三个参数的matches方法了。


boolean matches(Method method, Class<?> targetClass, Object... args);

该方法执行的时机是增强方法要执行之前,判断参数是否满足要求,如果满足,则执行增强。注意isRuntime方法是创建代理对象时就决定好的,而是否执行三个参数的matches方法是调用增强之前判断的。

总结

从上面的源码可以看出,PointCut就是起到过滤的作用,首先是过滤类,然后再过滤方法,筛选出需要加强的方法来。由接口可知,我们要将参数中的class或method进行比较,然后过滤,那么,和谁进行比较呢?要过滤的类和方法的规则存在哪里了呢?请看下回分解。

到此这篇关于Java Spring AOP之PointCut案例详解的文章就介绍到这了,更多相关Java Spring AOP之PointCut内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java Spring AOP之PointCut案例详解

本文链接: https://www.lsjlt.com/news/134482.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java Spring AOP之PointCut案例详解
    目录一、PointCut接口二、ClassFilter接口三、MethodMatcher接口总结一、PointCut接口 package org.springframewor...
    99+
    2022-11-12
  • 【Spring AOP】@Aspect结合案例详解(二): @Pointcut使用@within和within(已附源码)
    文章目录 前言@within完善打印日志案例@within深入说明 within匹配指定类匹配指定包(package) 源码下载总结 前言 在微服务流行的当下,在使用Spring...
    99+
    2023-10-27
    spring java aop pointcut within
  • Java @Pointcut注解表达式案例详解
    1 表达式类型 标准的Aspectj Aop的pointcut的表达式类型是很丰富的,但是Spring Aop只支持其中的9种,外加Spring Aop自己扩充的一种一共是10种类型...
    99+
    2022-11-12
  • 【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知Advice注解(已附源码)
    文章目录 前言AOP与Spring AOP@Aspect简单案例快速入门 一、@Pointcut@annotation 二、五种通知Advice1. @Before前置通知2. @After后置通知3. @AfterRunn...
    99+
    2023-08-16
    spring java aop pointcut annotation
  • Java Spring之@Async原理案例详解
    目录前言一、如何使用@Async二、源码解读总结前言 用过Spring的人多多少少也都用过@Async注解,至于作用嘛,看注解名,大概能猜出来,就是在方法执行的时候进行异步执行。 一...
    99+
    2022-11-12
  • Java之Spring注解开发案例详解
    在Spring4之后,要使用注解开发,必须要保证aop的包导入了 使用注解需要导入context约束,增加注解的支持! <?xml ver...
    99+
    2022-11-12
  • Java Spring AOP详解
    目录1.什么是AOP?2.AOP在Spring中的作用3.使用Spring实现AOP方式一:使用Spring的接口方法二:使用自定义类来实现方法三:使用注解实现总结1.什么是AOP?...
    99+
    2022-11-12
  • 详细解读Java Spring AOP
    一、对AOP的初印象 首先先给出一段比较专业的术语(来自百度): 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式...
    99+
    2022-11-12
  • Spring框架学习之AOP详解
    目录一、概念二、底层原理:动态代理2.1 有接口, JDK 动态代理2.2 无接口, CGLIB 动态代理三、术语四、操作4.1 Spring 框架一般都是基于 AspectJ 实现...
    99+
    2022-11-12
  • Java之HashMap案例详解
    概述 这篇文章,我们打算探索一下Java集合(Collections)框架中Map接口中HashMap的实现。Map虽然是Collctions框架的一部分,但是Map并没有实现Col...
    99+
    2022-11-12
  • Java之Algorithm_analysis案例详解
    public class BubbleSort { public void sort(int[] array){ for(int i=1;i<...
    99+
    2022-11-12
  • Java的Spring AOP详细讲解
    目录什么是AOP&作用AOP的动态代理技术基于JDK的动态代理cglib动态代理AOP相关概念AOP开发明确事项需要编写的内容AOP技术实现的内容AOP 底层使用哪种代理方式...
    99+
    2022-11-13
  • Java Spring拦截器案例详解
    springmvc提供了拦截器,类似于过滤器,他将在我们的请求具体出来之前先做检查,有权决定接下来是否继续,对我们的请求进行加工。 拦截器,可以设计多个。 通过实现handlerun...
    99+
    2022-11-12
  • Java Thread之Sleep()案例详解
    一、API简介 Thread.sleep()是Thread类的一个静态方法,使当前线程休眠,进入阻塞状态(暂停执行),如果线程在睡眠状态被中断,将会抛出IterruptedExcep...
    99+
    2022-11-12
  • Java之OutputStreamWriter流案例详解
    一、OutputStreamWriter流     API说明:OutputStreamWriter是从字符流到字节流的桥接:使用指定的字符集将写入其中...
    99+
    2022-11-12
  • Java aop面向切面编程(aspectJweaver)案例详解
    面向切面编程的目的就是:在不改变别人的代码的前提下,在别人代码方法执行前或后,执行(切入自己的逻辑) 准备:idea+maven+aspectjweaver-1.8.9.jar ...
    99+
    2022-11-12
  • Spring基于AspectJ的AOP开发案例解析
    目录AspectJ简介注解开发环境准备不同的通知类型最通知中通过value属性定义切点入门案列@Before前置通知@AfterReturning后置通知@Around环绕通知@Af...
    99+
    2022-11-13
  • Java注解之Elasticsearch的案例详解
    学会了技术就要使用,否则很容易忘记,因为自然界压根就不存在什么代码、变量之类的玩意,这都是一些和生活常识格格不入的东西。只能多用多练,形成肌肉记忆才行。 在一次实际的产品开发中,由于...
    99+
    2022-11-13
    Java注解 Elasticsearch Java Elasticsearch
  • Java之Jackson使用案例详解
    序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取...
    99+
    2022-11-12
  • Java之Buffer属性案例详解
    一、前言 熟悉NIO的人想必一定不会陌生buffer中position,limit,capacity这三个属性吧,之前在学习的时候遇到一个问题:就是当你先往缓冲区写入一部分数据,然后...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作