循序漸進AOP 04

2021-08-10 08:07:37 字數 2236 閱讀 6324

首先我們準備一下用於演示的**:以模擬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 對於作業,遇到不會的盡量不要立刻向別人請教。如果實在解決不了的問題,可以先完成你會的...