从源码入手,一文带你读懂Spring AOP面向切面编程( 三 )


工厂会根据配置与目标对象的类型,选择用JDK动态代理(参考《你真的完全了解Java动态代理吗?看这篇就够了》)还是CGLIB的代理(CGLIB具体在后续讲) 。
代理后的对象放回ctx中,然后当程序执行的时候,会直接调用这个代理类 。
至此整个AOP的代理流程就结束了 。下面来了解下CGLIG代理与JDK代理的不同
CGLIB与JDK代理区别
CGLIB(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库 。它可以在运行期扩展Java类与实现Java接口 。Hibernate支持它来实现PO(Persistent Object 持久化对象)字节码的动态生成 。
回顾下JDK代理,JDK代理需要一组需要实现的接口,然后通过这些接口获取构造方法,用这个构造方法和InvocationHandler,实例化一个对象出来 。所以JDK的方式是基于接口的 。
而CGLIB的代理是基于类的,用目标类生成一个子类,子类重写父类的方法,从而达到动态代理的效果 。CGLIB的使用和实现等后面有机会再详细介绍 。目前暂时只要理解两者不同的使用场景就足够了 。
总结
回顾下Spring AOP的流程
Spring加载自动代理器AnnotationAwareAspectJAutoProxyCreator,当作一个系统组件 。当一个bean加载到Spring中时,会触发自动代理器中的bean后置处理bean后置处理,会先扫描bean中所有的Advisor然后用这些Adviosr和其他参数构建ProxyFactoryProxyFactory会根据配置和目标对象的类型寻找代理的方式(JDK动态代理或CGLIG代理)然后代理出来的对象放回context中,完成Spring AOP代理
相信大家通过阅读本文,对Spring的AOP处理有一定的认识 。想更深入地了解,探索每一步,每一行代码的实现,可以下载Demo源码,一步步地调试Demo:


以上关于本文的内容,仅作参考!温馨提示:如遇专业性较强的问题(如:疾病、健康、理财等),还请咨询专业人士给予相关指导!

「辽宁龙网」www.liaoninglong.com小编还为您精选了以下内容,希望对您有所帮助: