国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

Spring AOP的實現原理詳解及實例

2024-09-05 00:23:03
字體:
來源:轉載
供稿:網友

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; } } 

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


注:相關教程知識閱讀請移步到JSP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗源县| 邳州市| 东兰县| 唐山市| 滦平县| 桃园市| 贞丰县| 尤溪县| 星子县| 桦川县| 师宗县| 古浪县| 博野县| 科尔| 宜阳县| 阳西县| 丹江口市| 丰顺县| 开封县| 于田县| 新郑市| 屏山县| 曲松县| 清水河县| 汾阳市| 寿宁县| 宁乡县| 临高县| 平南县| 徐汇区| 建平县| 诸暨市| 阿瓦提县| 台北县| 万山特区| 宾阳县| 民和| 黑龙江省| 通海县| 兴业县| 确山县|