目录
什么是AOP?
AOP是一种面向切面的编程范式,可以降低代码的耦合性,提高开发效率;通俗的来说AOP就是在不改变源代码的情况下,实现新增功能。
AOP的术语。
连接点:类里面可以被增强的方法,则为连接点。
切入点:实际被增强的方法。
通知(增强):实际增强的逻辑部分为通知(增强)。
通知有五种类型,分别是:
前置通知:(@before )
后置通知:(@AfterReturning ):如果出现异常则不会被执行
环绕通知:(@Around(ProceedingJoinPoint proceedingJoinPoint) ):需要抛出异常
异常通知(@AfterThrowing )
最终通知(@After):不论有无异常都会执行
切面:把通知应用到增强的方法
AOP的操作
Spring框架一般基于Aspectj实现AOP操作。
Aspectj不是Spring的组成部分,独立于AOP框架。一般把Aspectj和spring框架一起使用,实现AOP的操作。
基于Aspectj实现AOP操作
(1)基于xml配置文件实现
(2)基于注解方法实现
引入AOP的依赖。
切入点表达式
切入点表达式作用:知道对那个类里面的方法进行增强
语法结构:execution([权限修饰符] [返回类型] [类全路径] 方法名称 )
AOP的底层原理。
AOP的底层使用了动态代理;jdk的动态代理和cglib代理。
第一种情况,有接口的时候使用jdk的动态代理。
第二种情况,没有接口时使用cglib代理。
JDK的动态代理
使用jdk的动态代理需要使用proxy类来创建代理对象。对象调用newProxyInstance方法。
该方法需要传入三个参数
第一个参数:类加载器
第二个参数:增强方法所在的类,这个类的实现接口,支持多接口。
第三个参数:实现InvocationHandler,创建代理对象,写增强部分的代码。
编写jdk动态代理方法。
创建接口,定义方法。
创建接口的实现类,编写实现方法。
使用proxy类创建接口代理对象