Skip to content
广告❤️成为赞助商

拦截器

拦截器,会在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();
    }
}