亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hibernate事件系統怎么實現

發布時間:2021-12-04 16:26:37 來源:億速云 閱讀:103 作者:iii 欄目:編程語言

本篇內容主要講解“Hibernate事件系統怎么實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Hibernate事件系統怎么實現”吧!

我們都知道應用程序能夠響應Hibernate內部產生的特定事件是非常有用的。這樣就允許實現某些通用的功能 以及允許對Hibernate事件進行擴展。

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

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

當某個方法被調用時,Hibernate Session會生成一個相對應的事件并激活所 有配置好的事件監聽器。

系統預設的監聽器實現的處理過程就是被監聽的方法要做的(被監聽的方法所做的其實僅僅是激活監聽器, “實際”的工作是由監聽器完成的)。

不過,你可以自由地選擇實現 一個自己定制的監聽器(比如,實現并注冊用來處理處理LoadEvent的LoadEventListener接口), 來負責處理所有的調用Session的load()方法的請求。

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

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

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

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

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以使用選定的監聽器來替代默認的監聽器。

<hibernate-configuration>     <session-factory>         ...          <listener type="load" class="MyLoadListener"/>     </session-factory> </hibernate-configuration>

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

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

通過在XML配置文件聲明而注冊的監聽器不能共享實例。如果在多個<listener/>節點中使用 了相同的類的名字,則每一個引用都將會產生一個獨立的實例。如果你需要在多個監聽器類型之間共享 監聽器的實例,則你必須使用編程的方式來進行注冊。

為什么我們實現了特定監聽器的接口,在注冊的時候還要明確指出我們要注冊哪個事件的監聽器呢?

這是因為一個類可能實現多個監聽器的接口。在注冊的時候明確指定要監聽的事件,可以讓啟用或者禁用對某個事件的監聽的配置工作簡單些。 

到此,相信大家對“Hibernate事件系統怎么實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肥东县| 龙山县| 丽水市| 武川县| 通江县| 安福县| 工布江达县| 修武县| 北辰区| 海南省| 紫阳县| 吴堡县| 万全县| 江都市| 贵州省| 酒泉市| 阜新| 时尚| 怀宁县| 东阿县| 长顺县| 巴南区| 大庆市| 岳池县| 遵义市| 江永县| 建德市| 长海县| 会泽县| 汝阳县| 探索| 江安县| 海林市| 琼结县| 治县。| 海兴县| 湘潭县| 三台县| 民丰县| 万全县| 平谷区|