av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Hibernate事件系統(tǒng)

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

創(chuàng)新互聯(lián)企業(yè)建站,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁設(shè)計,有多年建站和網(wǎng)站代運(yùn)營經(jīng)驗(yàn),設(shè)計師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對于成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準(zhǔn)市場調(diào)研,為客戶提供的解決方案。

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

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

當(dāng)某個方法被調(diào)用時,Hibernate Session會生成一個相對應(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) 一個自己定制的監(jiān)聽器(比如,實(shí)現(xiàn)并注冊用來處理處理LoadEvent的LoadEventListener接口), 來負(fù)責(zé)處理所有的調(diào)用Session的load()方法的請求。

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

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

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

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

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

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

 
 
 
  1.  
  2.      
  3.         ...  
  4.          type="load" class="MyLoadListener"/> 
  5.      
  6.  

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

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

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

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

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


網(wǎng)頁標(biāo)題:Hibernate事件系統(tǒng)
文章出自:http://uogjgqi.cn/article/dpspcsd.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流