aop基本概念

在这里插入图片描述


本学习笔记将尽可能的将AOP的知识讲解的通俗易懂,先从一个典型的问题出发,引入AOP这个概念,介绍AOP的基本概念,再到Spring中的AOP的实现方案,最后进行一个简单的总结归纳。本学习笔记中不考虑cglib、也不会太关注Spring AOP如何使用,而是尽可能的简单的说清楚AOP的工作原理。
笔记中贴出的源代码均是Spring 5.1.7-RELEASE 版本问题提出如下代码块,现在需要统计这个方法执行的耗时情况public void runTask() {    doSomething();}一次性的解决肯定非常简单,直接添加一个时间记录即可,如下代码块public void runTask() {    long start = System.currentTimeMillis();    doSomething();    System.out.println(System.currentTimeMillis() - start);}改写原方法:就如上述直接添加时间点记录,针对一两个简单的需求这种方案是最快最高效的,但是弊端也是非常明显的。直接把非业务功能和业务功能耦合在一起、需要改动太大的业务功能、不能灵活修改,如果下一次需要把时间记录去掉,换成统计次数调用,那么所有的地方都得改动,成本非常大,稍有不慎就容易出错适配包装:即把原对象通过组合的方式包装到一个代理对象中,类似于适配器模式,如下图image⚠️ 这不是说真的就按照适配器模式去开发,而是采取类似的套路。新弄一个类然后新弄一个对应的方法,在新创建的方法里面再具体调用目标对象的方法。AOP也就是为了解决这类问题所提出的一种解决方案。AOP 的基本概念AOP(Aspect Oriented Programming)是基于切面编程的,可无侵入的在原本功能的切面层添加自定义代码,一般用于日志收集、权限认证等场景。在了解AOP包含的组件之前,如果是你去设计实现一套解决方案会如何设计呢?思考几分钟得处一些必备点~需要知道在什么地方进行切面操作需要知道切面操作的具体内容如果有多个切面操作,应该得有一个先后执行的顺序事实上AOP也确实是按照这个类似的思路去实现的,先来了解下AOP包含的几个概念Jointpoint(连接点):具体的切面点点抽象概念,可以是在字段、方法上,Spring中具体表现形式是PointCut(切入点),仅作用在方法上。Advice(通知): 在连接点进行的具体操作,如何进行增强处理的,分为前置、后置、异常、最终、环绕五种情况。目标对象:被AOP框架进行增强处理的对象,也被称为被增强的对象。AOP代理:AOP框架创建的对象,简单的说,代理就是对目标对象的加强。Spring中的AOP代理可以是JDK动态代理,也可以是CGLIB代理。Weaving(织入):将增强处理添加到目标对象中,创建一个被增强的对象的过程总结为一句话就是:在目标对象(target object)的某些方法(jointpoint)添加不同种类的操作(通知、增强操处理),最后通过某些方法(weaving、织入操作)实现一个新的代理目标对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值