一、AOP是什么
AOP(Aspect Oriented Programming)即面向切面编程,它是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。可以说AOP是对OOP(Object Oriented Programming 面向对象编程)的补充和完善,主要使用在日志记录、性能统计、安全控制等场景,使用AOP可以使得业务逻辑各部分之间的耦合度降低,只专注于各自的业务逻辑实现,从而提高程序的可读性及维护性。
二、AOP有什么作用
AOP 采取了横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,就是把程序重复的代码抽取出来,在需要执行的时候使用动态代理技术在不修改源码的基础上,对已有方法进行增强。
三、AOP的应用场景
日志记录、事务管理、全新啊验证、性能监测
四、AOP的一些术语
1.切面(Aspect)
是切入点和通知的结合,通知和切点共同定义了切面的全部内容。
2.切入点(Pointcut)
要对哪些 Joinpoint 进行拦截,即被拦截的连接点。
3.连接点(Joinpoint)
连接点是在应用执行过程中能够插入切面的一个点,这个点可以是调用方法时、抛出异常时、修改某个字段时。
4.引入(Introduction)
用来给一个类型声明额外的方法或属性。
5.织入(Weaving)
把切面连接到其他的应用程序类型或对象上,并创建一个被通知的对象,可以在类编译时、类加载时和运行时完成。
6.目标对象(Target Object)
被一个或者多个切面多通知的对象,也被称作被通知对象。
7.代理(Proxy)
AOP框架创建的对象,用来实现切面契约(如通知方法执行等)。
8.通知(Advice)
在切面的某个特定的连接点上执行的动作,即拦截到 Joinpoint 之后所要做的事情。
通知类型:
- 前置通知(Before):通知方法在目标方法被调用之前执行。
- 后置通知(AfterReturning):通知方法在目标方法完成之后后执行。
- 最终通知(After):通知方法在目标方法返回或异常后执行。
- 异常通知(AfterThrowing):通知方法在目标方法抛出异常后执行。
- 环绕通知(Around):通知方法围绕目标方法执行。
五、AOP的实现原理
AOP技术的实现主要分为两大类:
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行。常用的动态代理技术有:基于接口的 JDK动态代理、基于父类的 CGLIB动态代理
二是采用静态植入的方式,引入特定的语法创建“切面”,从而使编译器可以在编译期间织入有关“切面”的代码。
五、AOP的使用方式
1.通过注解实现AOP配置
①导入aop和spring依赖
②创建目标接口和目标类(含切点)
③创建切面类(含有增强方法),并配置织入关系
注意切点表达式的写法:execution([修饰符] 返回值类型 包名.类名.方法名(参数))
④将目标类和切面类的对象创建权交给spring,并在配置文件中开启组件扫描和aop的自动代理
⑤测试aop
2.通过配置文件XML实现AOP配置
①导入相关依赖
②创建目标接口和目标类
③创建切面类(含有增强方法)
④将目标类和切面类的对象创建权交给spring
⑤在xml配置文件中配置织入关系
⑥测试aop