spring aop实现机制 小结

最近在看spring aop,自己这几天稍微小小总结下,以便于以后万一忘记了可以在这里看看,温习温习。

aop大家都不陌生就是面向切面编程。
aop里的各种名词包括Joinpoint(拦截点),pointcut(拦截表达式),advice(切入的逻辑)。通俗一点就是每个pointcut表达式都会对应一些joinpoint拦截点,然后对应这些拦截点织入相应的advice。就这样。
springAOP现方式大类可以分成静态织入和动态织入。
静态织入就是在编译期,切面的代码直接编译到目标字节码里,这样虽然对系统的性能没有影响,但是灵活性不够。
而动态织入的aop的机制就比较多了。
1. 动态代理。是在运行期,目标类加载后,为接口动态生成代理类,将切面的逻辑通过代理接口加入到子类中。但是唯一的缺点是关注点是接口,对系统有一点点性能的影响。(springAOP默认机制)
2.动态字节码生成。在运行期,目标类加载后,动态构建字节码文件生成目标类的子类,将切面逻辑加入到子类中。缺点是扩展类的实例如果有final时,无法进行织入。cglib是该方法的实现机制。
3.自定义类加载器。在运行期,目标类加载前,将切面逻辑加入到目标字节码里。缺点是代码中如果使用了其他类加载器,那么被其他类加载器加载的类将不会被织入切面逻辑。
4.字节码转换。在运行期,所有类加载器加载字节码前,进行拦截织入。

你可能感兴趣的:(java基础,spring)