Java 语言里 AOP 的实现种类
AOP 是 Aspect Oriented Programming 的缩写,即面向切面编程。就像是拦路打劫,把别人执行的逻辑中间拦下来,干自己的事情,至于别人的逻辑能不能继续、或者怎样继续,你都可以控制。
网上介绍 AOP 的文章很多,百度百科和维基百科上都有详细介绍。
在 Java 语言里,AOP 有两种实现方式。
编译期 AOP
就是干预 javac 的编译过程,把拦截逻辑直接编译到 class 文件里,这样不影响运行时的性能。
代表实现:AspectJ
运行期 AOP
编译过程不管,管的是 ClassLoader。Java 要执行一个 class 文件,首先要通过 ClassLoader 把 class 字节码加载到内存,然后再执行。运行期 AOP 有两种思路:
- 在 ClassLoader 加载的过程中修改 class 字节码,把拦截逻辑写入字节码。
- 在运行期根据配置动态生成 class 字节码,然后再通过 ClassLoader 重新加载。
代表实现:AspectWerkz、Spring AOP、JDK 动态代理。
参考:http://www.blogjava.net/hello-yun/archive/2014/09/28/418365.html