AOP是什么
AOP全称 Aspect-Oriented Programming 即面向切面编程。怎么样,是不是感觉很熟悉?对,类似的还有面向过程编程(Procedure-Oriented Programming),面向对象编程(Object-Oriented Programming)。如果对后面两种编程方式有一定的了解,那么对于AOP想必也就比较容易理解了。
就像面向对象编程,关注点在于对象,即类。而面向切面编程理所当然关注于切面,那么什么是切面?可以理解为程序执行时的某个节点,或更具体一点,在某个方法执行之前,执行之后,返回之后等其它节点。
几个概念的区别
1. AspectJ
AspectJ是一个基于Java语言的AOP框架,它采用编译时增强,会将增强目标编译得到一个新的AOP代理类。
2. Spring AOP
Spring提供的AOP框架,使用了和AspectJ一样的注解,但是通过动态生成代理类的方式生成AOP代理类。
3. JDK Dynamic AOP
Spring AOP中AOP代理的一种实现,使用原生JDK反射和动态代理生成AOP代理,需要代理类与目标实现相同的接口。
4. CGLib AOP
Spring AOP中AOP代理的另一种实现,使用CGLib动态生成AOP代理类,需要代理类为目标类的子类。
AOP术语
1. Aspect
一个切面,可以理解为一个切面模块,将相关的增强内容写进同一个切面。例如:一个负责日志的切面。
2. Join Point
代表可以由AOP增强织入的程序执行节点。
3. Advice
所要做的增强处理
4. Pointcut
切入点,定义了将被Advice增强的一个或多个Join Point,可以使用正则表达式或模式匹配。
5. Target object
被增强的目标对象
Adivce的种类
1. Before
方法执行之前
2. After
方法执行之后
3. After-returning
方法成功执行完成之后
4. After-throwing
方法抛出异常之后
5. Around
环绕方法执行的整个周期