Spring AOP 源码初窥(一) 概念

不苦

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

环绕方法执行的整个周期

参考链接

阅读 1.8k

不苦
春水碧于天,画船听雨眠。

苦中作乐。

30 声望
3 粉丝
0 条评论
你知道吗?

苦中作乐。

30 声望
3 粉丝
宣传栏