一、JoinPoint类、Proceedingjoinpoint 类
1、在使用springboot写AOP的时候,有个JoinPoint类,用来获取代理类和被代理类的信息。
JointPoint是程序运行过程中可识别的点,这个点可以用来作为AOP切入点。JointPoint对象则包含了和切入相关的很多信息。比如切入点的对象,方法,属性等。我们可以通过反射的方式获取这些点的状态和信息,用于追踪tracing和记录logging应用信息。
2、Proceedingjoinpoint 继承了 JoinPoint。是在JoinPoint的基础上暴露出 proceed 这个方法。
环绕通知 = 前置 + 目标方法执行 + 后置通知,proceed方法就是用于启动目标方法的执行。暴露出这个方法,就能支持 aop:around 这种切面。
(Proceedingjoinpoint 仅支持环绕通知@Around,而其他的几种切面只需要用到JoinPoint,这也是环绕通知和前置、后置通知方法的一个最大区别。这跟切面类型有关)
注意:
joinpoint.getSignature():获取被增强的方法相关信息。
将joinpoint.getSignature拿到的对象强转成MethodSignature这个实现类之后,里面的getReturnType()方法可以用来拿目标方法返回值类型。
二、AOP环绕通知获取注解信息
1、概念
注解(Annotation)是撰写在原始码中的资讯,可以提供代码以外的额外资讯,本身有其结构,你可以使用工具提取这些结构化讯息。
简单来说注解就是写在程序上方的结构化注释,java会按照其结构读取讯息,并且做对应操作。
比如@Override注解标注在方法上,在编译期间,java就会检查当前方法是否重载了父类的方法,如果没有就报错。
java自带标准注解
@Override:表示当前的方法定义将覆盖父类中的方法;
@Deprecated:表示代码被弃用,如果使用了被@Deprecated注解的代码则编译器将发出警告;
@SuppressWarnings:表示关闭编译器警告信息。
2、代码示例
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。