分析neo4j动作监听类EventListener——Neo4jAuditingEventListener

最近用了neo4j图形数据库开发项目,neo4j教程

其中项目需要实现:

1.create/update数据时更新时间戳和操作人信息

2.delete数据时需要更新数据删除状态标志,实现软删除

通过读neo4j的源码了解到neo4j也有类似的EventListener事件监听器。

neo4j的监听器总共封装了两个类和一个接口,它们的关系是这样的:

d392c0827d8e63eb24e279f7a5e770ae107.jpg

neo4j的EventListener接口定义四个方法,分别是save之前、前后,delete之前、之后,(Q:为什么没有封装update之前、之后方法?):

public interface EventListener {

    void onPreSave(Event event);

    void onPostSave(Event event);

    void onPreDelete(Event event);

    void onPostDelete(Event event);
}

EventListenerAdapter类实现了EventListener接口,但是只做了它的无操作实现(类只实现接口,但是不实现接口中方法的具体逻辑,这样做的目的是:当外界想要封装自己的Listener时只需要继承EventListenerAdapter并重写自己需要的方法,而不需要实现EventListener所有的方法)。

Neo4jAuditingEventListener类又继承了EventListenerAdapter类,在Neo4jAuditingEventListener中定义了两个构造函数和重写了onPreSave方法,

上文提到了(Q:为什么没有封装update之前、之后方法?),详细分析一下Neo4jAuditingEventListener.onPreSave方法可知,在这个方法中写着

auditingHandlerFactory.getObject().markAudited(object);

这句话,转到markAudited方法,

	public void markAudited(Object object) {

		Assert.notNull(object, "Source object must not be null!");

		if (!isAuditable(object)) {
			return;
		}

		IsNewStrategy strategy = isNewStrategyFactory.getIsNewStrategy(object.getClass());

		if (strategy.isNew(object)) {
			markCreated(object);
		} else {
			markModified(object);
		}
	}

看到在这里会判断这个action是create还是update,neo4j在save()方法中实现了两个功能,

到这里,我就可以开发自己的neo4j监听器

public class MyNeo4jEventListener extends Neo4jAuditingEventListener {

    public MyNeo4jEventListener(ObjectFactory<IsNewAwareAuditingHandler> auditingHandlerFactory, SessionFactory sessionFactory) {
        super(auditingHandlerFactory, sessionFactory);
    }

    @Override
    public void onPreSave(Event event) {

    }

    @Override
    public void onPostSave(Event event) {

    }

    @Override
    public void onPreDelete(Event event) {

    }

    @Override
    public void onPostDelete(Event event) {

    }
}

 

转载于:https://my.oschina.net/u/2378709/blog/3044523

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值