1.什么是AOP
AOP全称Aspect Oriented Programming,即面向切面编程。主要目的是提供公共的抽象类,减少重复代码的工作成本。
public class ViewSpaceService {
public void addViewPoint(int pointId) {
// 事务管理模块
// 业务处理模块
// 性能监控模块
}
public void deleteViewPoint(int pointId) {
// 事务管理模块
// 业务处理模块
// 性能监控模块
}
}
若把ViewSpaceService看做树木,业务逻辑便是中间的核心,事务管理和性能监控则是外围的其他同心圆。
下图更形象描述了通过AOP机制来实现抽象代码复用。
2.Spring AOP
Spring AOP主要基于AspectJ技术,核心采用动态代理机制,在内存中为目标类生成一个代理类,并实现了目标类的所有方法,在代理类的相关方法中进行一些了增强逻辑,同时,回调目标类的真实方法。动态代理有JDK动态代理和CGLib动态代理两种,JDK动态代理的目标类必须实现接口,而CGLib动态代理没有限制;JDK动态代理在创建对象时效率高于CGLib,而运行时效率低于CGLib。
2.1 AOP术语
- 连接点(Join Point):
A point during the execution of a program, such as the execution of a method or the handling of an exception. In Spring AOP, a join point always represents a method execution.
- 切面(Aspect):
A modularization of a concern that cuts across multiple classes. Transaction management is a good example of a crosscutting concern in enterprise Java applications.
切面是通知和切入点的结合,Java世界里类是基本元素,所有的事物都必须依托于某个类,切面就是这个类。
3. 实例
参考资料
Spring源码深度解析(AOP功能源码解析)
Spring系列(四):Spring AOP详解)
Spring源码解析系列汇总
完全读懂Spring框架之AOP实现原理
细说Spring——AOP详解(AOP概览)
Spring AOP面向切面编程:理解篇(一看就明白)