本篇文章就聊一聊SpringAop的具体写法。AOP(Aspect Oriented Programming) 面向切面编程,是OOP(面向对象编程)的一种补充,OOP关注点是对象。AOP关注的是相同的一类行为。比如:每个Controller方法的日志打印。<br />SpringAOP支持使用XML和注解两种方式对切面进行配置。
1.AOP的术语
- 连接点:就是一个普通的类中的可以被代理的方法(就是类中方法)
- 切入点:真正被代理的方法,可以通过切入点表达式进行指定
- 通知:在原有方法代码上,增强的代码。分为5种
- 切面:个人理解,就是一个关注点的具体实现,包含通知、切入点定义
2.依赖准备
想要使用SpringAop需要引入AspectJ的jar包。
如果想使用Cglib动态代理,自然需要引入,Cglib的jar包。但是在Spring的官方文档中已经说明,cglib已经被打包到spring-core中了。所以没有必要再手动引入。
3.默认使用JDK or CGLIB?
小伙伴们是不是有这么个问题?Spring默认使用的是哪种代理呢?这个问题其实在官方文档中已经给出了答案。
- 优先使用JDK动态代理
- 但是如果被代理类真的没有实现接口,那么会使用CGLIB作为没有实现接口的这些类的动态代理
如果你希望无论类实现了接口或没实现接口,都统一使用CGLIB做动态代理的话,只需要在XML或配置类上启动切面的注解或标签中做如下修改:
- <aop:aspectj-autoproxyproxy-target-class="true"/> or @EnableAspectJAutoProxy(proxyTargetClass = true)
- <aop:configproxy-target-class="true">
4.5大通知的执行顺序
5.具体的配置方法
基于XML配置: https://gitee.com/gao_xi/spring-demo1/tree/aop-xml/
基于注解配置:https://gitee.com/gao_xi/spring-demo1/tree/aspect-xml-config/