a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > JSP > 正文

Spring AOP的實(shí)現(xiàn)原理詳解及實(shí)例

2024-09-05 00:23:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Spring AOP的實(shí)現(xiàn)原理詳解及實(shí)例

spring 實(shí)現(xiàn)AOP是依賴JDK動(dòng)態(tài)代理和CGLIB代理實(shí)現(xiàn)的。

以下是JDK動(dòng)態(tài)代理和CGLIB代理簡(jiǎn)單介紹

    JDK動(dòng)態(tài)代理:其代理對(duì)象必須是某個(gè)接口的實(shí)現(xiàn),它是通過在運(yùn)行期間創(chuàng)建一個(gè)接口的實(shí)現(xiàn)類來(lái)完成對(duì)目標(biāo)對(duì)象的代理。

    CGLIB代理:實(shí)現(xiàn)原理類似于JDK動(dòng)態(tài)代理,只是它在運(yùn)行期間生成的代理對(duì)象是針對(duì)目標(biāo)類擴(kuò)展的子類。CGLIB是高效的代碼生成包,底層是依靠ASM(開源的Java字節(jié)碼編輯類庫(kù))操作字節(jié)碼實(shí)現(xiàn)的,性能比JDK強(qiáng)。  

在Spring中,有接口時(shí)將采用JDK的方式實(shí)現(xiàn)proxy代理對(duì)象,當(dāng)沒有接口時(shí),將采用cglib中的方式實(shí)現(xiàn)prixy代理對(duì)象。詳情如下:

// JDK方式:PersonService為接口,PersonServiceBean為實(shí)現(xiàn)類,   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包實(shí)現(xiàn):PersonServiceBean為實(shí)現(xiàn)類,  而沒有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());//設(shè)置目標(biāo)類的子類,該子類會(huì)覆蓋所有父類中的非final方法   enhancer.setCallback(this);//設(shè)置回調(diào)  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; } } 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JSP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日本做暖暖视频高清观看 | 亚洲人人 | 国产精品久久久久久亚洲调教 | 欧美精品一区二区在线观看 | 国产小视频在线播放 | 国产欧美一区二区三区在线看 | 欧美一区二区视频 | 亚洲a视频 | a在线观看| 久久久一区二区 | 亚洲97色| 中文字幕在线不卡视频 | 国产福利精品在线 | 色综合久久久久 | 国产在线一区二区三区在线观看 | 超碰五月 | 欧美高清一区二区 | 欧美精品a∨在线观看不卡 国产精品一区二区三区在线 | 黄色在线观看网址 | 久久久亚洲综合 | 国产69精品久久久久观看黑料 | 日本不卡网站 | 国产成人精品一区二区视频免费 | 午夜精品久久久久久久久久久久久蜜桃 | 玖玖国产精品视频 | 操视频网站| 午夜免费网 | 欧美视频免费 | 中文精品一区二区三区 | 国产欧美精品一区二区三区 | 黄色日本视频 | av官网 | 国产精品久久久久久久久久99 | 亚洲电影在线观看 | 日本xxxx96| 国产美女久久 | 超碰一区| 国外成人在线视频网站 | 欧美黑人巨大xxx极品 | 精品国产99| 久久精品国产亚洲一区二区三区 |