最近用了neo4j图形数据库开发项目,neo4j教程
其中项目需要实现:
1.create/update数据时更新时间戳和操作人信息
2.delete数据时需要更新数据删除状态标志,实现软删除
通过读neo4j的源码了解到neo4j也有类似的EventListener事件监听器。
neo4j的监听器总共封装了两个类和一个接口,它们的关系是这样的:
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) {
}
}