AoP
AoP:面向切面编程,对业务逻辑的各个部分进行隔离,使得业务逻辑的各个部分之间的耦合度降低。
通俗来讲:不修改源码的方式,在主干功能里添加新功能。
例如:
1、AoP底层使用动态代理
有两种动态代理情况:
(1)有接口,使用JDK动态代理
创建接口实现类的代理对象,增强类的方法
(2)没有接口情况,使用CGLIB动态代理
创建子类的代理对象,增强类的方法
2、AoP(JDK的动态代理)
JDK的动态代理:使用Proxy类的方法newProxyInstance方法来创建代理对象
第一个参数:类加载器;
第二个参数:增强方法所在的类所实现的接口,支持多个接口
第三个参数:实现InvocationHandler接口,创建代理对象,写增强的方法
代码实现:
spring5对动态代理做了封装
3、AoP术语:
(1)连接点:可以被增强的方法
(2)切入点:实际被增强的方法
(3)通知(增强):实际增强的逻辑部分
通知的类型:
前置通知
后置通知(有异常就不执行)
环绕通知
异常通知
最终通知(有异常仍然执行)
(4)切面:是动作,把通知应用到切入点过程
(把增强的逻辑部分应用到需要被增强的方法处)
Spring 框架一般是基于ASpectJ实现AoP操作
ASpectJ不是Spring的组成部分,是独立的AoP框架,一般把AspectJ和Spring框架一起使用,进行AoP操作
基于ASpectJ实现AoP操作的方式:
1)基于xml配置文件方式
2)基于注解方式
切入点表达式:
切入点:实际被增强的方法
切入点表达式的作用:用来知道是对哪个类的哪个方法进行增强
4、AoP操作(AspectJ配置文件)
注意:增强类中,不同的方法代表不同的增强逻辑
3、创建对象,并进行通知的配置
1)开启注解扫描
2)使用注解创建对象
3)在配置文件中开启生成代理对象
4)在增强类上添加注解@Aspect,便可生成代理对象
额外:
把相同的切入点进行抽取:
使用完全注解开发:
创建配置类,不需要创建xml配置文件