Java培训实战教程之spring的AOP底层实现介绍

JDK动态代理

Jdk1.3引入了动态代理技术,它要求要目标类必须实现接口,简单说,jdk实现的动态代理只能针对于实现接口的类的对象创建代理。
java.lang.reflect.Proxy类提供了创建对象代理对象的方法

Java培训实战教程之spring的AOP底层实现介绍

代码实现
创建目标类

Java培训实战教程之spring的AOP底层实现介绍
Java培训实战教程之spring的AOP底层实现介绍

创建代理工厂类

Java培训实战教程之spring的AOP底层实现介绍

测试操作

Java培训实战教程之spring的AOP底层实现介绍

Cglib动态代理

JDK的动态代理用起来非常简单,但它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,该怎么办?现在我们可以使用CGLIB
CGLIB(Code Generation Library)是一个开源项目!
是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口
如果我们独立使用cglib,我们需要单独导入cglib的jar包,而在spring的高版本中,已经引入了cglib的包,所以不需要在单独导入。(内置在spring-core包中)

Java培训实战教程之spring的AOP底层实现介绍

注意:如果单独使用cglib,还需要引入一个asm包。原因:CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。
目标类

Java培训实战教程之spring的AOP底层实现介绍

使用cglib创建代理工厂

Java培训实战教程之spring的AOP底层实现介绍

测试代码

Java培训实战教程之spring的AOP底层实现介绍

注意:在spring的底层AOP实现,默认提供jdk动态代理与cglib动态代理。
问题:spring底层到底使用哪种代理?

  1. 如果目标类实现了接口,优先使用jdk动态代理
  2. 如果目标类无接口实现,使用cglib动态代理

  本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!

Java培训实战教程之spring的AOP底层实现介绍

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/253043.html

(0)
上一篇 2022年5月7日 00:38
下一篇 2022年5月7日 00:43

相关推荐

发表回复

登录后才能评论