##什么是AOP切面编程???
--1: 在运行时期,动态的将代码切入到类的指定方法,指定位置上的编程思想就是面向切面编程。
--2: AOP是oop编程思想的有效补充,Aop是spring提供的关键特性之一。
--3:好处 使用AOP技术,可以将一些系统相关的编程工作,独立的提取出来,独立实现,
然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入大量的系统相关的逻辑,
比如,事务的管理,日志的管理,权限的管理。
##AOP特点
采用横向抽取机制,取代了传统纵向继承体系重复性代码。
##AOP底层实现
-A理实现OP底层使用动态代。 包括两种方式
--1 使用JDK动态代理实现
--2 使用cglib实现
-JDK动态代理实现: 只能对实现了接口的类生产代理,而不是针对类,该目标类型实现的接口都将被代理
原理是通过在运行期间创建一个接口的实现类来完成目标对象的代理。步骤如下:
--1 定义一个实现接口InvocationHandler的类
--2 通过构造函数,注入被代理类
--3 实现invoke( Object proxy, Method method, Object[] args)方法
--4 在主函数中获得被代理类的类加载器
--5 使用Proxy.newProxyInstance( )产生一个代理对象
--6 通过代理对象调用各种方法
链接:https://pan.baidu.com/s/1OxbVz_a81JGAIGSPbcbVBg
提取码:renx
---demo位置 (Util.cn.com.flz.Util.demo.AOPProxyDemo.JDKProxy.MainJDKProxy)
-cglib动态代理实现: 针对类实现代理,对是否实现接口无要求。原理是对指定的类生成一个子类,覆
盖其中的方法,因为是继承,所以被代理的类或方法最好不要声明为final类型。
--1 定义一个实现了MethodInterceptor接口的类
--2 实现其intercept()方法.
链接:https://pan.baidu.com/s/1OxbVz_a81JGAIGSPbcbVBg
提取码:renx
---demo位置 (Util.cn.com.flz.Util.demo.AOPProxyDemo.cglibProxy.MainTest)
##AOP操作术语
-joinPoint(连接点) 类里面可以被增强的方法,这些方法被称为连接点。
-pointcut(切入点) 所谓切入点是指我们要对那些连接点进行拦截的定义。
-advice(通知/增强) 所谓通知是指拦截到joinpoint(连接点)之后要做的事情,就是通知
通知分为前置通知,后置通知,异常通知,最终通知,环绕通知。(切面要完成的工作)
-Aspect(切面) 是切入点和通知(引介)的结合。
-Target(目标对象) 代理的目标对象(要增强的类)
-Weaving(织入) 把增强应用到目标对象的过程,把advies应用到target的过程。
-Proxy(代理) 一个类呗AOP织入增强后,就产生一个结果代理类。
##通俗记忆
-切入点: 在类里面可以有很多方法被增强,比如实际操作中,只是增强了个别方法,则定义实际:
呗增强的方法称之为切入点。
-通知/增强: 增强的逻辑,称之为增强,比如日志的扩展,这个日志功能称之为增强,包括
.前置通知(before) 在方法之前执行。
.后置通知(after) 在方法之后执行。
.异常通知 在方法出现异常时执行。
.最终通知 在后置通知之后执行。
.环绕通知 在方法之前和之后执行。
-切面:把增强应用具体到方法上面的过程称之为切面。
##Spring中AOP的应用
链接:https://pan.baidu.com/s/1KUOcRqkZPd8Hjvc62MRFiQ
提取码:a5kx
---demo位置(TeduStore\src\test\java\AopProxyDemoTest\Test1.java)
https://blog.youkuaiyun.com/qq_39690957/article/details/89430437