Posted on 2007-10-15 16:57
G_G 閱讀(1167)
評論(0) 編輯 收藏 所屬分類:
AOP
學習擁有連貫
在我剛認識
讓 java 動態 這種動態編譯動態加載的幾天后
對我一向不懂的 AOP 特別是 AspectJ 開竅了 (哈哈 那感覺好啊^_^)
下面我寫出我剛對AOP的一些小練
1。目的
DAO中大量的 session的開和閉 不緊使代碼成倍加,還及容易出錯
用 設計模式 hibernate 包裝 下大家好象有點接受不了(@_@!)
AOP就進入我的視線 但總沒個切入點
2。原理
其實
讓 java 動態 就是那點東西 但IBM 包出個好用的框架 來 。
3。代碼說明
//*******************Dao.java ****************************
package?tt;
//為了簡單 session 看成是 真的session 哈 ^_^
public?class?Dao?{
????public?String?session?=?"close"?;?
????
????public?void?testDao(){
????????System.out.println(?"testDao?in?function?:?"+?session);
????}
????
????static?public?void?main(String[]args){
????????Dao?dao?=?new?Dao()?;
????????dao.testDao();
????????System.out.println("main?in?function?:?"?+??dao.session);
????}
}
//*****************List.aj ****************************
package?tt;
public?aspect?List?{
??? //切點? 范圍聲明? (Dao.testDao 歸 readOnly切點管? )
????pointcut?readOnly(Dao?dao):execution(*?*Dao.testDao*(..))&&this(dao);
????//掛載 readOnly 開始方法
?????before(Dao?dao)?:??readOnly(dao)?{?????????
?????????????openSession(dao);
??????}
???? //掛載 readOnly 結束方法
?????after(Dao?dao)?returning()??:??readOnly(dao)?{
??????????close(dao);
?????}
????
???? // readOnly 方法 運行代碼 (到這可以大膽的寫 java 代碼了 ) 。。。。
?????private?void?openSession(Dao?dao)?{
?????????if(dao.session.equals("close"))
?????????????dao.session?=?"Session?Open";
?????}
?????private?void?close(Dao?dao)?{
?????????dao.session?=?"close"?;
?????}
}
4。結果:
testDao in function : Session Open
main in function : close
4。后續
AspectJ 使 AOP 簡單
可能還會統一標準
能為我們的java 框架靈活 更上一層 (期待)