说明
AOP、Spring AOP、Aspectj
AOP
- 在我们原来的的代码的基础上,方法执行前,方法返回后,方法出现异常时,进行拦截处理或者叫做增强
Spring AOP
- 基于动态代理实现,默认如果使用接口,使用jdk动态代理。如果没有实现接口,则使用CGLIB实现
- Spring 3.2 以后,spring-core 直接就把 CGLIB 和 ASM 的源码包括进来了,这也是为什么我们不需要显式引入这两个依赖
- Spring AOP 需要依赖于 IOC 容器来管理。
- Spring AOP 只能基于容器中的Bean实现代理增强
- Spring 提供了 AspectJ 的支持
Aspectj
- AspectJ来自于Eclipse基金会
- 属于静态织入 注入时机可以是:
-
-
- Compile-time weaving:编译期织入,如类 A 使用 AspectJ 添加了一个属性,类 B 引用了它,这个场景就需要编译期的时候就进行织入,否则没法编译类 B。
- Post-compile weaving:也就是已经生成了 .class 文件,或已经打成 jar 包了,这种情况我们需要增强处理的话,就要用到编译后织入。
- Load-time weaving:指的是在加载类的时候进行织入,要实现这个时期的织入,有几种常见的方法。1、自定义类加载器来干这个,这个应该是最容易想到的办法,在被织入类加载到 JVM 前去对它进行加载,这样就可以在加载的时候定义行为了。2、在 JVM 启动的时候指定 AspectJ 提供的 agent:
-javaagent:xxx/xxx/aspectjweaver.jar
。
3.AspectJ 能干很多 Spring AOP 干不了的事情,它是 AOP 编程的完全解决方案。
Spring AOP
spring源码阅读(二)-Spring AOP
原文:https://www.cnblogs.com/LQBlog/p/13993882.html