拦截器
拦截器,会在MongoPlus调用执行器时,经过拦截器,可以对传入参数进行修改
说明:
使用拦截器时,需要将其注册为SpringBean
普通拦截器
com.mongoplus.interceptor.Interceptor
- 该接口是拦截器的接口,所有拦截器都应实现此接口,选择性的实现接口中的方法
- executeSave(documentList): 添加拦截器方法
- executeRemove(filter): 删除拦截器方法
- executeUpdate(queryBasic,updateBasic): 更新拦截器方法
- executeQuery(queryBasic, projectionList, sortCond): 查询拦截器方法
- executeAggregate(aggregateConditionList): 管道拦截器方法
- executeCount(queryBasic,countOptions): 统计拦截器方法
- executeBulkWrite(writeModelList): 批量操作拦截器方法
- executeSave(documentList, collection): 添加拦截器方法
- executeRemove(filter, collection): 删除拦截器方法
- executeUpdate(queryBasic,updateBasic, collection): 更新拦截器方法
- executeQuery(queryBasic, projectionList, sortCond, collection): 查询拦截器方法
- executeAggregate(aggregateConditionList, collection): 管道拦截器方法
- executeCount(queryBasic,countOptions, collection): 统计拦截器方法
- executeBulkWrite(writeModelList, collection): 批量操作拦截器方法
示例
1. 实现拦截器接口
需要将拦截器类实现Interceptor接口,并将该类注册为Bean
java
//注册为SpringBean
@Component
public class CustomInterceptor implements Interceptor {}
2. 实现方法
选择性的实现Interceptor接口中的方法,就可以对参数进行拦截修改了,这里只实现添加的拦截
java
//注册为SpringBean
@Component
public class CustomInterceptor implements Interceptor {
@Override
public List<Document> executeSave(List<Document> documentList) {
log.info("打印添加传入的值");
documentList.forEach(System.out::println);
return documentList;
}
}
高级拦截器
com.mongoplus.interceptor.AdvancedInterceptor
相较于普通拦截器,高级拦截器提供了权限更高的操作,且可以直接返回数据,类似MyBatis拦截器的体验
高级拦截器会根据所有注册的高级拦截器和普通拦截器,形成拦截器责任链,高级拦截器更靠近底层
示例
java
@Bean
public class OptimisticLockerInterceptor implements AdvancedInterceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 具体业务操作逻辑
// 继续执行其他拦截器
return invocation.proceed();
}
}