百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

JointPoint用法及与ProceedingJoinPoint 的关系

citgpt 2024-10-23 09:45 14 浏览 0 评论

 在使用SpringAop时,大家会经常用到 JoinPoint 这个对象,归纳一下它的各种用法,还有它和ProcessdingJoinpoint 的关系。


JointPoint用法及与ProceedingJoinPoint 的关系

JointPoint 意为加入的点 术语为 连接点 (连接切点与所要切入的方法),放到SpringAop中为所加入具体“切点”的点。


当我们使用 环绕通知 @Around 作为通知类型时,会使用ProceedingJoinPoint 这个连接点 ,ProceedingJoinPoint为 JoinPoint的子接口


代码语言:javascript

复制

public interface ProceedingJoinPoint extends JoinPoint {

代码语言:javascript

复制

void set$AroundClosure(AroundClosure var1);

// 执行方法 ,返回执行的结果 因为 环绕通知 不像 @Before @After 能够区分出,切点方法执行的前后要执行的前后顺序,

//因此使用 proceed()来 区分 方法执行的前后

代码语言:javascript

复制

Object proceed() throws Throwable;

//使用自己定义的 参数去Object[] var1 去执行方法

代码语言:javascript

复制

Object proceed(Object[] var1) throws Throwable;

}


ProceedingJoinPoint 作为JoinPoint的子接口 同样可使用 JoinPoint的接口方法。接下来看JoinPoint的方法 :


代码语言:javascript

复制

public interface JoinPoint {

代码语言:javascript

复制

String toString();

代码语言:javascript

复制

String toShortString();

代码语言:javascript

复制

String toLongString();

//获得当前的代理类对象 

Object getThis();

//获取被代理的目标对象 常用

Object getTarget();

//获取被代理的方法参数 常用

Object[] getArgs();

//获取连接点的方法签名 展开具体的连接点的签名 常用

Signature getSignature(); 

//获取 资源的位置

SourceLocation getSourceLocation();

//获得连接点的通知类型

代码语言:javascript

复制

String getKind();

代码语言:javascript

复制

public interface EnclosingStaticPart extends JoinPoint.StaticPart {

}

//是一个 内部接口 接口的静态部分

public interface StaticPart {

  Signature getSignature();


 SourceLocation getSourceLocation();


 String getKind();


 int getId();


 String toString();


 String toShortString();


 String toLongString();

}

}


使用内部接口的意义益处

作用上讲:


 类的内部接口和外部接口,都是启到接口的作用,接口就是来定义规范。 具体可以理解成一个类中进一步的逻辑细分


好处:


一种对那些在同一个地方使用的接口进行逻辑上分组;  

封装思想的体现;

嵌套接口可以增强代码的易读性和可维护性;

内部接口不管有没有声明static,都是静态的.可以访问外部类的私有内容。


使用:当你定义了内部接口,实现的时候可以选择去实现这个内部接口 StacticPart,也可以选择实现内部接口的外部接口 JoinPoint,因此当你只想实现JoinPoint 中的个别方法,且内部类中的StacticPiont都用的话,只用实现 StacticPoint 就好,实现了逻辑上的细分。


在Map 中同样用到了内部类,定义Entry。


多次用到的 Signature接口 


代码语言:javascript

复制

public interface Signature {

  String toString();

 //获得连接点较短的信息

 String toShortString();

 //获得连接点较长的信息

 String toLongString();

 //得到连接方法名 常用

 String getName();

 //得到方法的声明类型 Modifier.toString(jp.getSignature().getModifiers())

 int getModifiers(); 

 //得到连接点的类型 

 Class getDeclaringType();

 //得到连接点方法的类名 常用

 String getDeclaringTypeName();

}


相关推荐

js中arguments详解

一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...

firewall-cmd 常用命令

目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...

epel-release 是什么

EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...

FullGC详解  什么是 JVM 的 GC
FullGC详解 什么是 JVM 的 GC

前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

2024-10-26 08:50 citgpt

使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
跨域(CrossOrigin)

1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

微服务架构和分布式架构的区别

1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

深入理解与应用CSS clip-path 属性
深入理解与应用CSS clip-path 属性

clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

2024-10-25 11:51 citgpt

HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
Request.ServerVariables 大全

Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...

python操作Kafka

目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...

Runtime.getRuntime().exec详解

Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...

promise.all详解 promise.all是干什么的
promise.all详解 promise.all是干什么的

promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

2024-10-24 16:21 citgpt

Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解

取消回复欢迎 发表评论: