首先我們準備一下用於演示的**:以模擬mvc模式的經典架構來解釋
pojo層
@repository
public void user
dao層介面以及實現類
public inte***ce userdao
@component
public class userdaoimpl implements userdao
}
service層介面以及實現類
public inte***ce uservice
@service
public class userserviceimpl implements userservice
}
servlet 層
@controller
public class userservlet
}
事務類
@component
public class txmanager
public void commit()
}
一、靜態**
要求**類和被**的類有相同的方法,因此我們在建立**類的時候要和被**的類實現相同的介面。
要求將事務處理橫向放入service層而且做到神不知鬼不覺
@service("userservice")
public class staitcproxy
}
測試類
pulbic class mytest
}
輸出的結果是
開啟了事務
儲存了乙個使用者:user=null;
提交了事務
有上述模擬測試可知:靜態**降低了耦合度,但是在如果每乙個方法都需要事務,就需要建立很多的**類,**復用性大大降低。因此出現了動態**:首先模擬一下jdk提供的動態**:
1首先我們需要建立乙個動態的**類,並建立獲取被**的類物件的方法
public class jdkdynamicproxy
//建立**例項物件的方法
public object getproxy(final object target)
});return proxy;
}}
jdk提供的動態**解決了復用性問題,需要新增事務的時候會自動建立**類,執行相關的操作。那麼新的問題又來了,如果乙個類沒有介面那麼此**便不能使用。這就引出了cglib動態**,這是由spring框架提供的動態**,接下來我們來模擬演示一下:
//建立乙個動態**類,宣告乙個獲取**物件的方法
public static object getproxy(final object target,final txmanager txmanager)
});return enhance.create();
}
以上通過**進行橫向植入並不能進行對被**物件方法的過濾,就比如將事務植入service層,service層中所有方法都要被植入事務,但是需求並不可能都要求如此。這時spring框架中aop就可以彌補這種缺陷。接下來我們來演示一下:
//建立事務切面類和通知方法
@component
pulic class txaspect
}
spring核心配置檔案:
Linux循序漸進 1
第一課 什麼是linux 簡單地說,linux是一套免費使用和自由傳播的類unix作業系統,它主要用於基於i ntel x86系列cpu的計算機上。這個系統是由全世界各地的成千上萬的程式設計師設計和實現 的。其目的是建立不受任何商品化軟體的版權制約的 全世界都能自由使用的unix相容 產品。linu...
循序漸進學程式設計
軟體開發者是乙個日新月異的領域 it 中的大師,今天的程式設計方式與明天的程式設計或許截然不同,技術在不斷地革新,新語言 新平台的如雨後春筍般出現 更好的解決方案的冒出,因此我們需要跟得上節奏,我們沒有選擇,唯有努力提高自己。下面的幾點建議或許能幫助你成為乙個優秀地開發者。你是否聽說過 kaizen...
軟體開發 循序漸進
隨便寫了這麼點,呵呵,應該是比較凌亂的,也不完全,希望大家不要見笑。1 學習應該從基礎打起,不要一開始就嘗試最高深的技術。2 每看一本書,不要說這章我以前學習過了,也掌握的很好,因此我可以跳過這一章看更重要的了。3 對於作業,遇到不會的盡量不要立刻向別人請教。如果實在解決不了的問題,可以先完成你會的...