当前位置:首页 > 日记 > 正文

Spring AOP的实现原理详解及实例

Spring AOP的实现原理详解及实例

Spring AOP的实现原理详解及实例

spring 实现AOP是依赖JDK动态代理和CGLIB代理实现的。

以下是JDK动态代理和CGLIB代理简单介绍

    JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成对目标对象的代理。

    CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CGLIB是高效的代码生成包,底层是依靠ASM(开源的Java字节码编辑类库)操作字节码实现的,性能比JDK强。  

在Spring中,有接口时将采用JDK的方式实现proxy代理对象,当没有接口时,将采用cglib中的方式实现prixy代理对象。详情如下:

// JDK方式:PersonService为接口,PersonServiceBean为实现类,   public class JDKProxyFactory implements InvocationHandler {   private Object targetObject;      public Object createProxyIntance(Object targetObject)   {   this.targetObject=targetObject;   return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),     this.targetObject.getClass().getInterfaces(), this);   }  public Object invoke(Object proxy, Method method, Object[] args)  throws Throwable {   PersonServiceBean person=(PersonServiceBean)this.targetObject;   Object result=null;    if(person.getUser()!=null)    {     result = method.invoke(targetObject, args);    }   return result; } } 
//使用CGlib包实现:PersonServiceBean为实现类,  而没有PersonService接口,       public class CGlibProxyFactory implements MethodInterceptor{  private Object targetObject;    public Object createProxyInstance(Object targetObject)  {    this.targetObject=targetObject;   Enhancer enhancer=new Enhancer();   enhancer.setSuperclass(this.targetObject.getClass());//设置目标类的子类,该子类会覆盖所有父类中的非final方法   enhancer.setCallback(this);//设置回调  return enhancer.create();  }  public Object intercept(Object proxy, Method method, Object[] args,  MethodProxy methodProxy) throws Throwable {  PersonServiceBean person=(PersonServiceBean)this.targetObject;   Object result=null;    if(person.getUser()!=null)    {     result = methodProxy.invoke(targetObject, args);    }  return null; } } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

angular2+node.js express打包部署

angular2+node.js express打包部署

实战,电脑软件,node,express,js,Angular2我自己还在摸索学习中,本文介绍了angular2+node.js express打包部署的实战,分享给大家,也给自己留个笔记angular是客户端js,Node.js 是服务端JS,建立SPA 网站需要把这两者统一到一起。1、angular2项目…

怎么样用word绘制表格用word绘制表

怎么样用word绘制表格用word绘制表

绘制,步骤,方法,表格,电脑软件,  word已经普及人们的生活,可以用word来制作个人简历、制作1篇文章、制作1张电子小报亦或是论文等等,下面小编来教大家如何用word绘制1张简单的表格。word绘制表格的步骤这是我绘制的1张简单表格大家只要知道…

怎么恢复excel2010没有保存的文件

怎么恢复excel2010没有保存的文件

文件,恢复,电脑软件,  恢复excel2010没有保存的文件,有时我们太匆忙了,把Excel做到一半的时候我们忘记点击保存,就直接把它给关了,再打开的时候就老是显示不出来了,就没有了。以下是小编为您带来的关于恢复excel2010没有保存的文件,希望对您有…

PHP框架laravel的.env文件配置教程

PHP框架laravel的.env文件配置教程

配置,文件,框架,教程,电脑软件,前言大家应该都知道使用laravel框架开发PHP程序的时候,配置框架的.env文件是至关重要的,这个文件上需要配置数据库、数据库用户以及缓存等,下面来一起看看详细的配置教程。一、配置APP_KEYlaravel框架默认在.env…

PS怎么制作扇形文字?

PS怎么制作扇形文字?

文字,扇形,电脑软件,PS,今天为大家分享PS怎么制作扇形文字方法,很简单,只需几个步骤即可参考本文,来看看吧!步骤:1、选择“横排文字工具”;2、在文档中输入“”;3、选择属性栏中的“变形”按钮,选择下拉菜单中的&ldq…

使用AngularJS 跨站请求如何解决js

使用AngularJS 跨站请求如何解决js

请求,如何解决,电脑软件,AngularJS,jsonp,今天写东西的时候遇到了 一种情况 ,因为用的不是自己公司人员写的接口 ,而我要写的东西是抓别的网页上的接口所以出现了 一下这种情况 用 get请求出现拦截跨站请求资源 以下是解决办法,这是我的请求:…

在Word2007文档中如何设置自选图形

在Word2007文档中如何设置自选图形

文字,文档,图形,设置,如何设置,  在Word2007文档中,通过为自选图形设置文字环绕方式,可以使文字更合理地环绕在自选图形周围,从而使图文混排的文档更加规范、美观和经济。以下是小编为您带来的关于在Word2007文档中设置自选图形文字环绕,希望…

vuejs绑定class和style样式

vuejs绑定class和style样式

绑定,样式,电脑软件,vuejs,style,绑定Html Class我们可以传给 v-bind:class 一个对象,以动态地切换 class。注意 v-bind:class 指令可以与普通的 class 特性共存:<div class="static" v-bind:class="{ 'class-a': isA, 'class-b': isB…

excel2003规划求解的教程

excel2003规划求解的教程

教程,电脑软件,  Excel中如何操作规划求解呢?下面是小编带来的关于excel2003规划求解的教程,希望阅读过后对你有所启发!excel2003规划求解的教程:  规划求解步骤1:首先我们来讲一下EXCEL里面内置的单变量求解。规划求解步骤2:为了方便操作,…

Photoshop给人像服装更换成有个性

Photoshop给人像服装更换成有个性

有个性,人像,图案,电脑软件,Photoshop,衣服增加布纹的方法有很多,作者介绍的方法非常实用。直接把衣服单独抠出,并用想要的布纹剪贴到原衣服上;后期把原衣服的褶皱还原到布纹上,再调整颜色和光影等,得到想要的效果,下面就为大家介绍Photoshop给人…

angularjs定时任务的设置与清除示

angularjs定时任务的设置与清除示

清除,定时任务,设置,示例,电脑软件,人们似乎常常将AngularJS中的$timeOut() $interval()函数看做是一个内置的、无须在意的函数。但是,如果你忘记了$timeOut()$interval()的回调函数将会造成非常不好的影响,你可能会因此遇到代码莫名其妙的…

INdesign CS6怎么制作渐变色? ID渐

INdesign CS6怎么制作渐变色? ID渐

图形,渐变,渐变色,制作方法,电脑软件,INdesign中想要制作一个渐变的图形,该怎么制作渐变色呢?下面我们就来看看详细的教程。软件名称:Adobe InDesign CS6 中文免费版软件大小:878.42MB更新时间:2014-05-261、打开一个ID文档,现在我要在这个文档添…