读书人

JDK动态署理与CGLIB代理的对比

发布时间: 2012-11-01 11:11:32 作者: rapoo

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);    }}


总结下Spring的AOP运用的设计模式 , AOP 主要利用代理模式, 然后依赖通知(本人认为是策略模式)来实现AOP。 这样通知就可以独立发展。











读书人网 >软件架构设计

热点推荐