spring AOP(二) 相关类或接口
注意: 前一节我们的代理是对对象进行了代理,而spring
的AOP
可以基于方法进行代理,因为类的属性和方法都有相应的类来描述或者对应 属性由java的Field 表示,方法由Method
来表示
这里说几个spring AOP 的接口或类
1 切入点
org.springframework.aop.Pointcut
用来说明是对哪些类的哪些方法进行横切,就是被代理的对象的一个集合
public interface Pointcut{//说明对哪些类进行横切ClassFilter getClassFilter();//用来说明对哪些方法进行横切MethodMatcher getMethodMatcher();Pointcut TRUE = TruePointcut.INSTANCE;
}
2 连接点
org.springframework.aop.JoinPoint
当程序运行时,对某一个具体的要被横切的方法的描述,通过它可以获取被横切,也就是被代理的那个方法的运行时的状态,例如,被代理的方法的参数,所属对象,所属对象签名,代理对象。
public interface JoinPoint {//...//获取所属对象 Object getTarget();//获取被代理的方法的参数Object[] getArgs();//获取连接点的签名Signature getSignature();//描述位置,哪一行SourceLocation getSourceLocation();//...
}
3 通知
MethodBeforeAdvice,AfterReturningAdvice,ThrowsAdvice, Advice
是对
附加方法(被代理的方法前后需要执行的)的描述
3.1
public interface MethodBeforeAdvice extends BeforeAdvice {void before(Method method, Object[] args, Object target) throws Throwable;}
方法说明:before
方法有三个参数 被增强的方法,参数,被横切的对象从理论上来说在before
的方法内部可以执行 method.invoke(target,args)
来执行被增强的方法,但是我们一般不会这么做,我们会用这三个参数来动态获取一些信息,或其它功能,但不是去执行被增强的方法,也就是说BeforeAdvice没有代理的职责。
接口说明:BeforeAdvice
继承Advice
,BeforeAdvice
和 Advice
都是标识接口 没有方法,没有属性
参数说明:method
具体的一个连接点 args
连接点的参数 target
连接点所属的对象
3.2
public interface AfterReturningAdvice extends AfterAdvice {void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable;}
这里同样没有代理的职责
接口说明:AfterAdvice
继承Advice
,都是标识接口 没有方法,没有属性
参数说明:returnValue
被代理的方法的返回值的描述 method
具体的一个连接点 args
连接点的参数 target
连接点所属的对象
3.3
public interface ThrowsAdvice extends AfterAdvice {}
public void afterThrowing(Exception ex)
public void afterThrowing(RemoteException)
public void afterThrowing(Method method, Object[] args, Object target, Exception ex)
public void afterThrowing(Method method, Object[] args, Object target, ServletException ex)
说明:ThrowsAdvice
没有方法,没有属性,但是实现这个接口的类必须有 afterThrowing
方法
4 拦截器
MethodInterceptor
方法拦截器, 继承了Interceptor
接口,Interceptor
接口又继承了Advice
接口,Interceptor
和Advice
都是标识接口没有属性和方法
public interface MethodInterceptor extends Interceptor {Object invoke(MethodInvocation invocation) throws Throwable;
}
这里的invoke
方法有代理的责任,也就是说在invoke
方法内部会调用代理的那个方法,也就是去执行连接点
MethodInvocation
继承了Invocation
接口,Invocation
接口继承了Joinpoint
接口,注意这里是Joinpoint
,是java
语言的java.lang.reflect.AccessibleObject.Pointcut
而Joinpoint
接口内部有 Object proceed() throws Throwable
这样一个方法,调用这个方法会执行JoinPoint描述的那个被代理的方法。
5 配置器
Advisor
是Pointcut
和Advice
的配置器,将 某个具体的 Advice
注入到 Pointcut
所指定的位置
public interface Advisor {Advice getAdvice();boolean isPerInstance();}public class DefaultPointcutAdvisor extends AbstractGenericPointcutAdvisor implements Serializable {private Pointcut pointcut = Pointcut.TRUE;//...public DefaultPointcutAdvisor(Pointcut pointcut, Advice advice) {this.pointcut = pointcut;setAdvice(advice);}//...
}public abstract class AbstractGenericPointcutAdvisor extends AbstractPointcutAdvisor {private Advice advice;/*** Specify the advice that this advisor should apply.*/public void setAdvice(Advice advice) {this.advice = advice;}@Overridepublic Advice getAdvice() {return this.advice;}}
从上面我们可以看到DefaultPointcutAdvisor
需要持有一个Advice
的对象一个Pointcut
的对象我们在使用的时候只需要为它提供这两个对象他就会去自己进行配置
6 代理工厂
ProxyFactoryBean
, 创建代理对指定的某个类的对象进行代理,或者对符合规则的一堆类进行代理使用时只需进行配置。
spring AOP(二) 相关类或接口相关推荐
- typescript笔记二:类与接口
1. class类 类的基础知识-ES6+ 类 1.1 constructor构造函数 类通过class关键字来定义一个类. 类可以有自己的构造函数constructor,当我们通过new关键字创建一 ...
- Basler相机 设备相关类和接口 IDevice IPylonDevice
Device.h 接口就是结构体,里面全是纯虚函数 #define interface struct //The interface implemented by all device object ...
- 史上最烂 spring aop 原理分析
盗引·中篇·spring aop spring aop: jdk 动态代理和 cglib 动态代理的特点.区别.使用方式.原理及各自对反射的优化.二者在 spring 中的统一.通知顺序.从 @Asp ...
- Spring AOP(二)AOPAlliance与SpringAOP核心接口介绍
目录 AOP联盟 1. Advice.MethodInterceptor拦截器(invoke方法:调用invocation.proceed) 2.Joinpoint .MethodInvocation ...
- Spring AOP源码解析(二)—— AOP引入
目录 配置类 AopAutoConfiguration AspectJAutoProxyingConfiguration ClassProxyingConfiguration @EnableAspec ...
- spring aop如何在切面类中获取切入点相关方法的参数、方法名、返回值、异常等信息
aop思想可以很好的帮助我们实现代码的解耦,比如我们之前提到的,将日志代码与业务层代码完全独立,通过spring aop的代理类进行整合.在切面类中,我们也能够通过spring提供的接口,很好的获取原 ...
- Spring学习总结(9)——Spring AOP总结
spring IOC和AOP是Spring框架的两大核心基石,本文将对Spring AOP做一个系统的总结. 什么是AOP AOP(Aspect-Oriented Programming,面向切面编程 ...
- Spring AOP介绍及源码分析
2019独角兽企业重金招聘Python工程师标准>>> 软件开发经历了从汇编语言到高级语言和从过程化编程到面向对象编程:前者是为了提高开发效率,而后者则使用了归纳法,把具有共性的东西 ...
- Spring Aop 组件概述
Spring Aop 概述 AOP(Aspect-Oriented Programming) 面向切面编程, 这种编程模型是在 OOP(Object-Oriented Programming) 的基础 ...
- 关于Spring AOP,除了动态代理、CGLIB,你还知道什么?
来源 | 草捏子 责编 | Carol 封图 | CSDN 付费下载于视觉中国 Spring 作为 Java 中最流行的框架,主要归功于其提供的 IOC 和 AOP 功能.本文将讨论 Spring A ...
最新文章
- workerman的基本用法
- stm32cubemx无法生成工程_经验分享 | STM32CubeMX + STM32F1系列开发时遇到的四个问题及解决方案分享...
- PHP Storm Built In Server Doesn't Recognize mod_rewrite
- 初始化资源管理器 winform
- java登录界面命令_Java命令行界面(第19部分):jClap
- 网络爬虫--10.使用正则表达式的爬虫
- vue3 线上环境 ctx 无法识别
- 「Luogu」[JSOI2007]字符加密 解题报告
- 深入浅出mysql-sql基础
- C实现NV12转I420
- SitePoint Podcast#165:您说的是缓存,我说的是Caché
- rtmp推流工具_EV录屏推流抖音直播教程——墨涩网
- 开源开放 | OpenKG 更新发布新冠概念、防控和流行病等多个知识图谱
- AttributeError: partially initialized module ‘re‘ has no attribute ‘findall‘
- 【ESP32】arduino中的ESP32实时系统FreeRTOS使用教程(一)
- 可道云个人网盘-Docker安装
- Windows10指纹识别设置
- python解决租房问题_高德API+Python帮你解决租房问题
- 台式启动修复无法自动修复此计算机怎么办,如果win7启动修复无法自动修复此计算机怎么办...
- 安卓端哔哩哔哩下载文件存储处
热门文章
- Eclipse安装Tomcat插件全攻略
- seo教程之对搜索引擎的研究
- objective-C 的OOP(上)--类定义、继承及方法调用
- Linux内核中的延时函数
- 路由重发布Route Redistribution
- Android网卡(Wifi/Lan)带宽测试
- tcpdump截wireshark可以打开的包
- DLL错误之——无法加载DLL***.dll:找不到指定的模块(异常来自HRESULT:0x8007007E)问题的终极感悟
- oracle 数据迁移跑批,Oracle数据库纯数据的导出与导入
- springboot 直接转发调用_java springboot 引用openfeign 接口转发