一.AOP底层使用动态代理
(1)有两种情况动态代理
第一种有接口情况,使用JDK动态代理
第二种没有接口情况,使用CGLIB动态代理
1、使用JDK动态代理,使用Proxy类里面的方法创建代理对象
(1)创建接口,定义方法
(2)创建接口实现类,实现方法
(3)使用Proxy类创建接口代理对象
二.AOP术语
1、连接点
类里面哪些方法可以被增强,这些方法称为连接点
2、切入点
实际被真正增强的方法,称为切入点
3、通知(增强)
(1)实际增强的逻辑部分称为通知(增强)
(2)通知有多钟类型
*前置通知
*后置通知
*环绕通知
*异常通知
*最终通知 类似于finally
4、切面是动作
(1)把通知应用到切入点过程
三.AOP操作
1、Spring框架一般都是基于AspectJ实现AOP操作
(1)什么是AspectJ?
AspectJ不是Spring组成部分,独立AOP框架,一般把AspectJ和Spring框架一起使用,进行AOP操作
2、基于Aspect实现AOP操作
(1)基于xml配置文件实现
(2)基于注解方式实现(使用)
3、在项目工程里面引入AOP相关依赖
4、切入点表达式
(1)切入点表达式作用:知道对哪个类里面的哪个方法进行增强
(2)语法结构:
execution([权限修饰符][返回类型][类全路径][方法名称] ([参数列表]))
举例1:对dwd.com.spring5.dao.BookDao里面的add方法增强
execution(* dwd.com.spring5.dao.BookDao.add(…))
*代表任意修饰符,返回类型可以不写,(参数)
举例2:对dwd.com.spring5.dao.BookDao里面的所有方法增强
execution(* dwd.com.spring5.dao.BookDao.*(…))
举例3:对dwd.com.spring5.dao包里面的所有类里面所有方法增强
execution(* dwd.com.spring5..(…))
四.基于注解对AspectJ操作
1、创建类,在类里面定义方法
2、创建增强类(编写增强逻辑)
前置通知就是add方法之前执行
3、进行通知的配置
(1)在spring配置文件中,开启注解扫描
可以使用xml配置,也可以写配置类(全注解开发)
引入两个名称空间context和aop
(2) 使用注解创建User和 UserProxy对象
(3)在增强类上面添加注解@Aspect
(4) 在spring配置文件中开启生成代理对象
4、配置不同类型的通知
(1)在增强类的里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置
测试
几种通知
异常通知
5、相同切入点的抽取
6、有多个增强类多同一个方法进行增强,设置增强类优先级
(1)在增强类上面添加注解@Order(数字类型值),数字类型值越小优先级越高