AOP(面向切面编程),可以说是一种编程思想,其中的Spring AOP和AspectJ都是现实了这种编程思想。相对OOP(面向过程编程)来说,提供了另外一种编程方式,对于OOP过程中产生的横切性问题,这些横切性与业务无关,可以通过预编译方式和运行期动态代理来实现。比如可以应用在:日志记录、性能监控、事务管理等。
二、AOP的基本概念Aspect(切面):通常来说是一个类,里面定义了切点和通知,Spring AOP中可以用@AspectJ来标注这个类是切面;
Join point(连接点):可以理解成目标对象中的方法,该方法是要被增强的方法,也就是我们要作用的一个切入点;
Pointcut(切点):切点可以理解成连接点的集合;
Target object(目标对象):被代理的对象,也就是目标对象;
AOP proxy(代理对象):把被代理的对象织入了增强后的对象;
Weaving(织入):把增强也就是代理逻辑加入到目标对象上的过程;
Advice(通知):用于指定在特定连接点上的增强的位置;
① Before advice(前置通知):在目标方法被调用之前调用通知;
② After returning advice(返回通知):在目标方法成功执行之后调用通知;
③ After throwing advice(异常通知):在目标方法抛出异常后调用通知;
④ After (finally) advice(后置通知):在目标方法完成之后调用通知(不论是否出现异常都会执行,finally中调用);
⑤ Around advice(环绕通知):围绕连接点(目标方法)的通知。可以在方法调用前后执行自定义行为;
三、代理的实现方式我们知道AOP可以通过预编译的方式和运行期动态代理来实现,那么代理的实现方式有哪些呢?
我们定义一个接口类:UserService
package com.toby.service; /** * @desc: user 业务接口类 * @author: toby * @date: 2019/8/4 23:28 */ public interface UserService { /** * 添加 */ void add(); /** * say hello * @param name * @return */ String say(String name); }