SpringBoot AOP
AOP
AOP(Aspect-Oriented Programming,面向切面编程)是Springboot 的核心概念。它是面向对象编程的一种延续。
它将公共模块(日志,事务,权限,监控)代码与业务模块代码分开开发,通过动态代理实现两者组合发挥功能。
术语
连接点:就是被代理的方法。
切点:连接点的集合。可以通过正则表达式匹配一系列连接点。
通知:定义的新功能。按照执行时机可以分为前置通知,后置通知,环绕通知,正常返回通知,异常返回通知。
目标对象:被代理对象。
引入:引入新的类和方法。
织入:通过动态代理技术,生成代理对象。就是将通知应用到切点。
切面:公共模块类,由切点+通知+引入内容组成。
源码
public class LogAspect {@Pointcut("execution(* com.example.demo.service.MySweviceImpl.printName(..))")public void pointCut() {}@Before("pointCut()")public void before() {System.out.println("before ...");}
}
execution 表示匹配正则表达式定义的方法。com.example.demo.service.MySweviceImpl.printName
是目标对象的全限定名称,可以是类,可以是方法。(..)
表示任意参数。*
表示任意返回对象。
常用的匹配方法还有:@annotation():匹配带有特定注解的连接点。更多切点匹配定义参考 springboot 教程。
@Before 定义前置通知。在执行目标连接点之前,先执行前置通知。