濮阳杆衣贸易有限公司

主頁 > 知識庫 > Spring AOP的實現(xiàn)原理詳解及實例

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

熱門標簽:好操作的電話機器人廠家 地圖標注市場怎么樣 泰州泰興400電話 怎么申請 南京新思維電話機器人 聊城智能電銷機器人外呼 如何用中國地圖標注數(shù)字點 企業(yè)怎么在聯(lián)通申請400電話 南昌市地圖標注app 百度地圖添加標注圖標樣式

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

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

以下是JDK動態(tài)代理和CGLIB代理簡單介紹

    JDK動態(tài)代理:其代理對象必須是某個接口的實現(xiàn),它是通過在運行期間創(chuàng)建一個接口的實現(xiàn)類來完成對目標對象的代理。

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

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

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

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

您可能感興趣的文章:
  • 深入淺析Spring 的aop實現(xiàn)原理
  • 深入理解spring的AOP機制原理
  • Spring IOC和aop的原理及實例詳解
  • Spring AOP面向切面編程實現(xiàn)原理方法詳解
  • Spring AOP實現(xiàn)原理解析
  • Spring AOP注解案例及基本原理詳解
  • Spring AspectJ AOP框架注解原理解析
  • SpringAOP切點函數(shù)實現(xiàn)原理詳解
  • Spring Aop基本流程原理示例詳解

標簽:烏蘭察布 臨汾 白銀 開封 自貢 吉林 銅川 山南

巨人網(wǎng)絡通訊聲明:本文標題《Spring AOP的實現(xiàn)原理詳解及實例》,本文關鍵詞  Spring,AOP,的,實現(xiàn),原理,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Spring AOP的實現(xiàn)原理詳解及實例》相關的同類信息!
  • 本頁收集關于Spring AOP的實現(xiàn)原理詳解及實例的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    新龙县| 酒泉市| 济源市| 藁城市| 荣成市| 平武县| 阳东县| 徐闻县| 金华市| 怀仁县| 贵阳市| 扶风县| 安福县| 洪江市| 淮北市| 曲沃县| 保亭| 隆安县| 兴义市| 偏关县| 阿鲁科尔沁旗| 平湖市| 洛阳市| 罗源县| 宁波市| 横峰县| 黄冈市| 大邑县| 浪卡子县| 葵青区| 青神县| 黔东| 宜川县| 静宁县| 左贡县| 广水市| 长子县| 名山县| 福海县| 清丰县| 义马市|