Spring AOP
1. 什么是 AOP?
AOP 是一种面向切面的编程思维,是 OOP 的一种扩大和补充;和 OOP(面向对象)相比,是一种动静过程;AOP,它可能在预编译阶段和运行期动静代理的形式,实现在不批改代码的状况下给程序增加额定的性能。AOP 常被用在非核心业务的扩大上,进步零碎的可扩展性。例如日志治理,权限治理,事务处理,缓存等。
2.CGLIB(默认),JDK
AOP 的底层是基于动静代理实现的
(1) 如果被代理对象实现的是接口,就能够应用 JDK 动静代理机制对指标创立代理对象(代理对象和被代理对象实现同一个接口)(2) 如果被代理对象没有实现接口,就能够应用 CGLIB 代理机制创立代理对象(代理对象 implemens 被代理对象)(3) 应用 JDK 时须要配置文件中:spring.aop.proxy-target-class=false
3.AOP 相干术语
(1)Aspect: 定义一个切面类,被此注解形容的类是一个 Spring AOP 的一个切面类
(2)PointCut: 定义一个切入点办法;只能存在 Aspect 中;属性值是切入点的切入点表达式,有多种;切入点是连接点的汇合;(3)Joinpoit: 程序执行中的连接点,个别指向被拦挡到的指标办法
(4)Advice: 定义一个告诉,及切入点要执行的办法;其属性值是切入点表达式
4. 切入点表达式
4.1 bean: 用于匹配 bean 对象的所有办法
bean 表达式个别用于类级别,实现粗粒度的切入比方:bean(userServiceImpl) 指定 userServiceImpl 中的所有办法
bean(*ServiceImpl) 指定以 ServiceImpl 结尾的所有类的所有办法
4.2 annotation:
@annotation 是办法级别的细粒度切入办法,比方:
("@annotation(com.com.py.pj.common.annotation.SysLogRequired)")
其中 com.com.py.pj.common.annotation 是创立注解的包;SysLogRequired 是注解名
应用此接入点表达式时,须要把自定义的注解写在业务办法上。
5. 须要的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
6. 代码实现
参考