*spring aop 会根据实际情况(有无接口)自动选择 两种 动态代理(jdk和cglib)之一

资料:

(1)Cglib的简单使用:

https://blog.csdn.net/zhanghongjie0302/article/details/45648947

(2)关于java字节码框架ASM的学习:

https://www.cnblogs.com/liuling/archive/2013/05/25/asm.html

两种方式的区别:

JDK自从1.3版本开始,就引入了动态代理,JDK的动态代理用起来非常简单,但是它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的类可以使用CGLIB包。

CGLIB是一个强大的高性能的代码生成包。它被许多AOP的框架(例如Spring AOP)使用,为他们提供方法的interception(拦截)。CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。

 

posted @ 2018-08-21 08:29  吴桂鑫  阅读(346)  评论(0编辑  收藏  举报