Spring温习(5)--CGLIB的动态代理[附AOP内部实现讲解]
这篇文章紧接着上一篇静态代理和动态代理来说
前言:
到现在呢,老是讲动态代理,有的人都晕了,会说你这代理中用到的类怎么没有一个是与spring相关的呢,所以,我要说明的事,虽然现在讲的都是最普通的动态代理,但实质上就是将AOP的内部实现原理,Spring AOP之所以这么强大是因为它底层都是用动态代理来实现的,为了说明这一点,得贴出点源码来
1.如果是有接口声明的类进行AOP,spring调用的是java.lang.reflection.Proxy类来做处理
在spring的资源包中,找到org.springframework.aop.framework.JdkDynamicAopProxy这个类,在资源包的位置为spring-framework-2.5.6\src\org\springframework\aop\framework\JdkDynamicAopProxy.java,看看其中重要的代码片段
?
?
再看org.springframework.aop.framework.ReflectiveMethodInvocation中的代码片段
package com.javacrazyer.dao;public class TestProxy {public static void main(String[] args) {CGlibProxyFactory hander = new CGlibProxyFactory();//创建代理对象,这是这个代理对象是UserManagerImpl的子类 ServiceImpl service = (ServiceImpl)hander.newProxy(new ServiceImpl()); service.outPut(); service.putOut();}}?
?输出结果
--------ServiceImpl.checkSecurity()----------
I am method outPut
--------ServiceImpl.checkSecurity()----------
I am method putOut?
到目前位置,无论是前面的静态代理,javax.lang.Proxy的动态代理,还是这里的CGLIB的动态代理都是没有借助任何框架的情况下实现AOP的方法