Spring AOP是基于代理的。Spring使用了两种代理策略,一种是JDK动态代理,另一种是CGLIB代理。
JDK提供了JDK动态代理。它只能是按接口的代理,因此目标类需要实现接口。在您实现一个或多个接口时,spring会自动使用JDK动态代理。
另一方面,CGLIB是一个用于创建代理的第三方库。它可以通过子类化创建代理。如果类未实现接口,则Spring使用CGLIB作为代理。
序号 | 键 | JDK动态代理 | CGLIB代理 |
---|---|---|---|
1 | 基本 | 它只能是按接口的代理,因此目标类需要实现接口 | 它可以通过子类化创建代理 |
2 | 包 | Java可用 | 这是第三方库。 |
3 | 性能 | 比CGLIB代理慢一点 | 它比JDK动态代理更快 |
4。 | Final | Final类和Final方法不能被代理 | Final类和Final方法不能被代理 |
5 .. | 用例 | 当类实现一个或多个接口时,Spring使用JDK代理 | 当类未实现接口时,Spring使用CGLib代理 |