首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring复习(5)-CGLIB的动态代理[附AOP内部实现讲解]

2012-10-30 
Spring温习(5)--CGLIB的动态代理[附AOP内部实现讲解]这篇文章紧接着上一篇静态代理和动态代理来说前言:到

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的方法

热点排行