forked from mybatis/mybatis-3
-
Notifications
You must be signed in to change notification settings - Fork 0
由Mybatis想到动态代理
flysnow911 edited this page Mar 1, 2019
·
2 revisions
代理的种类: 静态代理,基于JDK的动态代理,基于CGLib的动态代理。 静态:在编译时期生成的代理关系。 动态:在运行时生成的代理关系。 静态的优点:灵活,执行效率高。 缺点:代码冗余,总是需要编写一个代理方法去代理被代理的方法。
JDK的动态代理 优点:代码简洁 缺点: 生成代理对象时需要被代理对象的接口,既被代理对象都需要实现一个接口,动态代理依据接口信息,决定代理那些方法。 这样对代码侵入性较高。 运行时调用代理方法,都是通过反射,性能低。
基于CGLib的动态代理: 优点:被代理对象不需要实现接口,可以直接为一个类实现代理。更加灵活。 缺点:1.创建代理过程中,没有接收接口信息,导致代理了被代理里的所有方法,包括构造方法。(巨大的缺点) 2.通过反射执行被代理方法,性能较低。
Mybatis中,Dao接口中各方法的执行就采用JDK动态代理的方式。