Spring之AOP
Spring AOP
面向切面编程。
Spring 动态代理特点
- 仅支持方法级别
有2种实现方式
- JDK动态代理
- 针对接口进行代理
- Spring默认选择改方式
- CGLIB动态代理
- 针对类的动态代理
- 通过继承实现,所以不能代理被
final修饰的类和方法
使用
1 |
|
Pointcut表达式类型
execution:可以精确到返回值、参数、方法名within:范围是包或者类,eg:within(com.cyh.app1..*)
AspactJ
- 一个全面的AOP方案
- 编译期和类加载时期编织
Spring AOP和AspectJ的区别
| Spring AOP | AspectJ |
| —
- | —
|
| 用纯Java实现 | 使用Java编程语言的扩展实现 |
| 无需单独的编译过程 | 除非设置了LTW,否则需要AspectJ编译器(ajc) |
| 仅需运行时编织 | 运行时编织不可用。支持编译时,后编译和加载时编织 |
| 不足–仅支持方法级编织 | 更强大–可以编织字段,方法,构造函数,静态初始值设定项,最终类/方法等… |
| 只能在Spring容器管理的bean上实现 | 可以在所有领域对象上实施 |
| 仅支持方法执行切入点 | 支持所有切入点 |
| 代理是针对目标对象创建的,并且方面已应用于这些代理 | 在应用程序执行之前(运行时之前)将方面直接编织到代码中 |
| 比AspectJ慢得多 | 更好的性能 |
| 易于学习和应用 | 比Spring AOP复杂得多 |
参考
- https://blog.csdn.net/qq_43842093/article/details/121803976
- https://cloud.tencent.com/developer/article/1497814
Aspect顺序
2023-06-09
使用Order配置顺序,值越小越在外层