真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Hibernate事件系統(tǒng)怎么實(shí)現(xiàn)

本篇內(nèi)容主要講解“Hibernate事件系統(tǒng)怎么實(shí)現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Hibernate事件系統(tǒng)怎么實(shí)現(xiàn)”吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國(guó)際域名空間、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、扶風(fēng)網(wǎng)站維護(hù)、網(wǎng)站推廣。

我們都知道應(yīng)用程序能夠響應(yīng)Hibernate內(nèi)部產(chǎn)生的特定事件是非常有用的。這樣就允許實(shí)現(xiàn)某些通用的功能 以及允許對(duì)Hibernate事件進(jìn)行擴(kuò)展。

如果需要響應(yīng)持久層的某些特殊Hibernate事件,你也可以使用Hibernate事件框架。 該事件系統(tǒng)可以用來替代攔截器,也可以作為攔截器的補(bǔ)充來使用。

基本上,Session接口的每個(gè)方法都有相對(duì)應(yīng)的Hibernate事件。比如 LoadEvent,F(xiàn)lushEvent,等等(查閱XML配置文件 的DTD,以及org.hibernate.event包來獲得所有已定義的事件的列表)。

當(dāng)某個(gè)方法被調(diào)用時(shí),Hibernate Session會(huì)生成一個(gè)相對(duì)應(yīng)的事件并激活所 有配置好的事件監(jiān)聽器。

系統(tǒng)預(yù)設(shè)的監(jiān)聽器實(shí)現(xiàn)的處理過程就是被監(jiān)聽的方法要做的(被監(jiān)聽的方法所做的其實(shí)僅僅是激活監(jiān)聽器, “實(shí)際”的工作是由監(jiān)聽器完成的)。

不過,你可以自由地選擇實(shí)現(xiàn) 一個(gè)自己定制的監(jiān)聽器(比如,實(shí)現(xiàn)并注冊(cè)用來處理處理LoadEvent的LoadEventListener接口), 來負(fù)責(zé)處理所有的調(diào)用Session的load()方法的請(qǐng)求。

監(jiān)聽器應(yīng)該被看作是單例(singleton)對(duì)象,也就是說,所有同類型的事件的處理共享同一個(gè)監(jiān)聽器實(shí)例,因此監(jiān)聽器 不應(yīng)該保存任何狀態(tài)(也就是不應(yīng)該使用成員變量)。

用戶定制的監(jiān)聽器應(yīng)該實(shí)現(xiàn)與所要處理的事件相對(duì)應(yīng)的接口,或者從一個(gè)合適的基類繼承(甚至是從Hibernate自帶的默認(rèn)事件監(jiān)聽器類繼承, 為了方便你這樣做,這些類都被聲明成non-final的了)。

用戶定制的監(jiān)聽器可以通過編程使用Configuration對(duì)象來注冊(cè),也可以在Hibernate的XML格式的配置文件中進(jìn)行聲明(不支持在Properties格式的配置文件聲明監(jiān)聽器)。

下面是一個(gè)用戶定制的加載事件(load event)的監(jiān)聽器:

public class MyLoadListener extends DefaultLoadEventListener {      // this is the single method defined by the LoadEventListener interface      public Object onLoad(LoadEvent event, LoadEventListener.LoadType loadType)              throws HibernateException {          if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {              throw MySecurityException("Unauthorized access");          }          return super.onLoad(event, loadType);      }  }

你還需要修改一處配置,來告訴Hibernate以使用選定的監(jiān)聽器來替代默認(rèn)的監(jiān)聽器。

              ...                

看看用另一種方式,通過編程的方式來注冊(cè)它。

Configuration cfg = new Configuration();  cfg.getSessionEventListenerConfig().setLoadEventListener( new MyLoadListener() );

通過在XML配置文件聲明而注冊(cè)的監(jiān)聽器不能共享實(shí)例。如果在多個(gè)節(jié)點(diǎn)中使用 了相同的類的名字,則每一個(gè)引用都將會(huì)產(chǎn)生一個(gè)獨(dú)立的實(shí)例。如果你需要在多個(gè)監(jiān)聽器類型之間共享 監(jiān)聽器的實(shí)例,則你必須使用編程的方式來進(jìn)行注冊(cè)。

為什么我們實(shí)現(xiàn)了特定監(jiān)聽器的接口,在注冊(cè)的時(shí)候還要明確指出我們要注冊(cè)哪個(gè)事件的監(jiān)聽器呢?

這是因?yàn)橐粋€(gè)類可能實(shí)現(xiàn)多個(gè)監(jiān)聽器的接口。在注冊(cè)的時(shí)候明確指定要監(jiān)聽的事件,可以讓啟用或者禁用對(duì)某個(gè)事件的監(jiān)聽的配置工作簡(jiǎn)單些。 

到此,相信大家對(duì)“Hibernate事件系統(tǒng)怎么實(shí)現(xiàn)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


當(dāng)前文章:Hibernate事件系統(tǒng)怎么實(shí)現(xiàn)
本文地址:http://weahome.cn/article/psdcpe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部