用picocontainer
和nanning
實現事務管理
是constructor injector
的ioc
容器。nanning
是dynamic aop
的一種實現。專案中我用
pico
作為我的微核心,在某些地方需要用到
aop,最典型的是:事務管理(
transaction manager
)。 首先考慮應用的前提,乙個
dao需要進行資料庫操作並需要事務。下面是兩個介面宣告:
publicinte***ce
daopublicinte***ce
txmanager
如果用oo的實現方法,可能是要讓
sampledao
這個實現類同時實現兩個介面等。按照單一職責原則,
sampledao
不應該了解事務管理,或者,某種情況下,不需要事務處理,這時候應該可以關閉事務。
這裡引入
aspect
(方面)來負責事務處理。或者說,事務其實是
service
的乙個方面。
但是,乙個問題是,事務往往和資料庫相關。想要控制事務,必須要能夠啟動事務的
connection,session
,transaction
等等。必須把這些東西同時傳遞給
service
和txmanager
。
publicinte***ce
objectreference
publicclass
databasereference
implements
objectreference
objcet
get()
void
set(
object
obj)
} txmanager
的實現類可以擁有乙個
databasereference
的例項用來獲取和
connection
相關的物件。
service
的例項也要得到同乙個
databasereference
,這樣txmanager
控制同乙個
connection
的事務才有效果。
示例如下,系統中我是使用的
hibernate
的session
publicclass
txmanagerimpl
implements
txmanager
publicvoid
begin
()publicvoid
commit
()publicvoid
rollback()}
publicclass
sampledao
implements
daovoid
update()}
dao和txmanager
之間有了紐帶:
databasereference
。然而,如果要控制事務,還需要乙個控制類,將所有的
dao操作置於事務管理內。
publicclass
transactionaspect
implements
aspect
publicvoid
introduce
(aspectinstance
arg0
)publicvoid
advise
(aspectinstance
instance
)catch
(exceptione)
}});}}
這時就可以建立乙個呼叫的例項了,這就需要
picocontainer
來負責物件的建立和管理:
mutablepicocontainer
pico
=new
defaultpicocontainer
(new
cachingcomponentadapte***ctory
(new
nanningcomponentadapte***ctory
()));
pico
.registercomponentimplementation
(txmanager
.class,
txmanagerimpl
.class);
pico
.registercomponentimplementation
(transactionaspect
.class,
transactionaspect
.class);
pico
.registercomponentimplementation
(sampledao
.class);
pico
.getcomponentinstances
();dao
dao=
(dao)
pico
.getcomponentinstance
(sampledao
.class);
dao.
update
(); 上面用到的
nanningcomponentadapte***ctory
,是nanocontainer
中nanning
包提供,負責將
nanning
例項整合到
picocontainer
。 從
log中可以看到,
dao的執行前後分別執行了
begin
和commit
,這樣我們就整合了
aop與
ioc。
本文需要讀者有一定的
aop和
iocblog
**。
本文由冰雲完成,首發於
csdn
,作者保留中文版權。
未經許可,不得使用於任何商業用途。
如需聯絡請發郵件:
icecloud(at)sina.com
E learning的現狀與未來
e learning e learning pc上網,通過網路進行學習的一種全新的學習方式。當然,這種學習方式離不開由多 網路學習資源 網上學習社群及網路技術平台構成的全新的網路學習環境。在網路學習環境中,匯集了大量資料 檔案資料 程式 教學軟體 興趣討論組 新聞組等學習資源,形成了乙個高度綜合整合...
CaptCha的現狀與未來
有乙個機會,朋友推薦乙個創業的哥們給我認識,方向就是驗證碼識別,當時以各種不明顯的陳述推諉掉,起初是職業道德的約束,到後來才發現,這其實是乙個無比困難的問題。可以利用現有的api很快地做好乙個可以執行的演示程式,但如果要改進,著實困難。什麼是驗證碼 驗證碼 captcha 其實並不是各位總是在不同 ...
實體關係抽取的現狀與未來
來到 2019 年的今天,深度學習的諸多侷限性也慢慢得到廣泛認知。對於自然語言處理而言,要做到精細深度的語義理解,單純依靠資料標註與算力投入無法解決本質問題。如果沒有先驗知識的支援,中國的桌球誰都打不過 與 中國的足球誰都打不過 在計算機看來語義上並沒有巨大差異,而實際上兩句中的 打不過 意思正好相...