您的位置:首页 > 编程语言 > Java开发

事件类型 对应的监听器接口

2014-04-02 21:15 2306 查看
  事件监听是JDK中常见的一种模式。 Hibernate中的事件监听机制可以对Session对象的动作进行监听,一旦发生了特殊的事件,Hibernate就会调用监听器类中的事件处理方法。在某些功能的设计中,既可以使用Hibernate的拦截器实现,也可以使用Hibernate的事件监听来实现。

  Hibernate 定义了多个事件涵盖了持久化过程中的不同生命同期,即Session对象中的第一个方法均分别对应事件。调用某个方法时就会触发相应的事件,并被预先设置的监听器收到及处理。

  Hibernate中事件监听器接口均在org.hibernate.event包中,事件与监听器接口对应关系如下:

  事件类型 对应的监听器接口

  auto-flush AutoFlushEventListener

  merge MergeEventListener

  delete DeleteEventListener

  persist PersistEventListener

  dirty-check DirtyCheckEventListener

  evict EvictEventListener

  flush FlushEventListener

  flush-entity FlushEntityEventListener

  load LoadEventListener

  load-collection LoadCollectionEventListener

  lock LockEventListener

  refresh RefreshEventListener

  replicate ReplicateEventListener

  save-update SaveUpdateEventListener

  pre-load PreLoadEventListener

  pre-update PreUpdateEventListener

  pre-delete PreDeleteEventListener

  pre-insert PreInsertEventListener

  post-load PostLoadEventListener

  post-update PostUpdateEventListener

  post-delete PostDeleteEventListener

  post-insert PostInsertEventListener

  注意:pre和post表示事件发生之前和之后。

  Hibernate 事件监听的使用方法如下:

  1、用户定制事件监听器首先需要与要处理事件相对应的接口,或者继承实现这个接口的类,然后通过 Hibernate的配置(hibernate.cfg.xml)配置事件监听器对象。如:

  public class LogPostLoadEventListener implements PostLoadEventListener{

  public void onPostLoad(PostLoadEvent event){

  ……

  …

  ……

  }

  }

  在Hibernate的配置文件中使用标签添加事件监听器功能:

  

  

  然而,也可以通过编程方式加载事件监听器对象:

  Configuration cfg = new Configuration();

  cfg.setListener("post-load",new LogPostLoadEventListener());

  cfg.configure();

  实现的代码如下:

  public interface Auditable {

  }

  public class AuditLog implements Serializable {

  private Integer id;

  private String entityName;

  private String entityId;

  private Date createTime;

  private String operationType;

  …

  }

  public class Product implements Serializable ,Auditable{

  private String id;

  private String name;

  private Double price;

  private String description;

  …

  }

  public enum OperationType {

  LoAD,CREATE,UPDATE,DELETE

  }

  配置文件如下:

  class="com.kkoolerter.hibernate.listener.AuditLogEventListener" />

  <listener type="post-update" p="" <="">

  class="com.kkoolerter.hibernate.listener.AuditLogEventListener" />

  <listener type="post-delete" p="" <="">

  class="com.kkoolerter.hibernate.listener.AuditLogEventListener" />

  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java