JDK动态代理与CGLIB代理的对比
这篇文章试验了JDK动态代理与CGLIB动态代理。从Spring的AOP框架介绍中得知对于使用接口的类,Spring使用JDK 动态代理(原来做项目中试图从Bean强制转换为实现类,结果报错,原来是这么回事),没有接口的就使用别的AOP框架aspectj,但这些都是依赖于 Java字节码工具ASM生成一个原类的新类,调用Callback
但是JDK动态代理为什么必须使用接口一直很疑惑,难道原理不是像ASM一样修改字节码吗?带着这个疑问,开始看JDK的Proxy代码。使用JDK动态代理的代码代码。
import com.proxy.ForumServiceImpl;import java.lang.reflect.Proxy;public class TestCglibProxy { public static void main(String args[]){ CglibProxy proxy = new CglibProxy(); //动态生成子类的方法创建代理类 ForumServiceImpl fsi = (ForumServiceImpl)proxy.getProxy(ForumServiceImpl.class); fsi.removeForum(10); fsi.removeTopic(2); }}