成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate事件系統(tǒng)

開發(fā) 后端
應(yīng)用程序能夠響應(yīng)Hibernate內(nèi)部產(chǎn)生的特定事件是非常有用的。這樣就允許實現(xiàn)某些通用的功能以及允許對Hibernate事件進行擴展。

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

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

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

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

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

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

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

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

用戶定制的監(jiān)聽器可以通過編程使用Configuration對象來注冊,也可以在Hibernate的XML格式的配置文件中進行聲明(不支持在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)聽器來替代默認的監(jiān)聽器。

  1. <hibernate-configuration> 
  2.     <session-factory> 
  3.         ...  
  4.         <listener type="load" class="MyLoadListener"/> 
  5.     </session-factory> 
  6. </hibernate-configuration> 

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

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

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

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

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

【編輯推薦】

  1. 簡述Hibernate中加載并存儲對象
  2. Hibernate傳播性持久化攻略
  3. 深入了解Hibernate自動狀態(tài)檢測
  4. 教你如何在Hibernate中實例化集合和代理
  5. 淺談其他的Hibernate元數(shù)據(jù)(Metadata)
責任編輯:仲衡 來源: IT168
相關(guān)推薦

2012-02-03 13:27:16

2012-02-08 14:24:35

HibernateJava

2009-06-18 10:41:18

Hibernate3.Hibernate3.

2009-06-18 11:43:40

Hibernate uHibernate s

2009-06-02 14:46:26

Hibernate關(guān)系映射教程

2011-11-21 16:49:58

日志常用事件

2012-02-08 11:15:38

HibernateJava

2009-09-21 17:33:50

Hibernate基礎(chǔ)

2009-09-29 16:04:29

Hibernate S

2009-09-29 16:41:58

Hibernate S

2009-09-29 17:11:23

Hibernate T

2009-06-16 16:10:59

Hibernate性能

2012-02-02 16:13:29

HibernateJava

2009-06-24 08:05:56

Hibernate基礎(chǔ)Configurati

2009-09-27 17:05:02

Hibernate p

2009-06-24 07:59:49

Hibernate方言

2009-09-27 16:21:22

Hibernate C

2009-09-28 17:23:51

Hibernate E

2009-09-27 13:42:05

Hibernate E

2009-09-24 17:24:20

Hibernate S
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品日韩欧美一区二区三区 | 亚洲美女在线一区 | 99久久精品免费看国产四区 | 国产精品久久久久久妇女 | av天天干 | 三级视频在线观看 | 精品视频在线观看 | 黄色在线免费观看 | 亚洲一区二区在线播放 | 亚洲一二三视频 | 国产一区二区毛片 | 99久久婷婷国产精品综合 | 午夜电影福利 | 欧美日韩综合一区 | 国产成人精品网站 | 国产免费一二三区 | 韩日一区二区三区 | 国产精品久久久久久久久久久久久 | 在线欧美一区二区 | 国产精品视频播放 | 亚洲成人av一区二区 | 午夜激情影院 | 欧美黄色绿像 | 伊人二区 | 九九热精 | 日韩无| 久久成人久久 | 色综合99 | www.一区二区 | 亚洲一区二区网站 | 一级做a| 成人精品一区 | 精品电影 | 国产乱肥老妇国产一区二 | 亚洲精品久久久久久一区二区 | 国产高清在线精品 | 国产成人精品免高潮在线观看 | 日本视频中文字幕 | 日韩av看片| 伊人精品久久久久77777 | 久久久久久久久久久久久91 |