SpringAOP是啥,怎么用?
一、面试问题:什么是SpringAOP?
- SpringAOP的全称是(Aspect Oriented Programming)中文翻译过来是面向切面编程,个人理解:主要意思是我们的传统架构至上而下,后期想要从中间切入写代码添加功能,比如日志、权限、事务等,这时候我们就需要写使用代理模式写,而springaop就是专门把这一块写代码的地方给抽象了出来称为切面,从而解决的代码混乱的问题,它的底层实现也是基于代理模式(动态代理)完成的。
············我就把自己知道的给大家分享了。
- 日志记录
- 权限验证(SpringSecurity有使用)
- 事务控制(调用方法前开启事务, 调用方法后提交关闭事务 )
- 效率检查(检测方法运行时间)
- 数据源代理(seata里面,获取到数据源连接执行的sql)
- 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 )
三、Spring的使用
先在主运行类上面写一个@EnableAspectJAutoProxy
@EnableAspectJAutoProxy
@SpringBootApplication
public class SeekServiceProvider {
public static void main(String[] args) {
SpringApplication.run(SeekServiceProvider.class, args);
}
}
-
定义切面
@Aspect @Component public class SeekAspect { }
-
定义切点(在上面这个类里面定义)
@Pointcut("execution(* com.llds.seek.SeekAspect.*.*(..))") public void cusPointcut(){ System.out.println("执行【cusPointcut】方法"); }
切点表达式不会的朋友我把连接放下面了
切点表达式使用
-
定义通知(在上面这个类里面定义)
@After("cusPointcut()")//后置通知/后置增强 public void cusAfter(){ System.out.println("执行【cusAfter】方法"); }
-
通知方式(常用)
-
前置通知
@Before("s()") public void before() { }
-
后置通知
@After("s()") public void after() { }
-
环绕通知
@Around("s()") public void around() { }
-
-