MyLogicServiceBeanPostProcessor.java 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package jnpf.database.plugins;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import jnpf.database.util.LogicDeleteHelper;
  4. import org.aopalliance.intercept.MethodInterceptor;
  5. import org.aopalliance.intercept.MethodInvocation;
  6. import org.springframework.aop.framework.ProxyFactory;
  7. import org.springframework.beans.BeansException;
  8. import org.springframework.beans.factory.config.BeanPostProcessor;
  9. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  10. import org.springframework.context.annotation.Configuration;
  11. import jakarta.annotation.Nonnull;
  12. import jakarta.annotation.Nullable;
  13. /**
  14. * MybatisPlus删除方法拦截, 若调用删除方法标记当前为删除操作, MybatisPlusMetaObjectHandler 自动填充删除时间、删除人员
  15. */
  16. @Configuration
  17. @ConditionalOnProperty(prefix = "config", name = "EnableLogicDelete", havingValue = "true", matchIfMissing = false)
  18. public class MyLogicServiceBeanPostProcessor implements BeanPostProcessor {
  19. @Override
  20. public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
  21. Object obj = BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
  22. if(obj != null && BaseMapper.class.isAssignableFrom(obj.getClass())){
  23. ProxyFactory factory = new ProxyFactory();
  24. factory.setTarget(obj);
  25. factory.addAdvice(new MethodInterceptor() {
  26. @Nullable
  27. @Override
  28. public Object invoke(@Nonnull MethodInvocation invocation) throws Throwable {
  29. if(invocation.getMethod().getName().startsWith("delete")){
  30. LogicDeleteHelper.setDeleteAction();
  31. }
  32. try {
  33. return invocation.proceed();
  34. } finally {
  35. LogicDeleteHelper.clearDeleteAction();
  36. }
  37. }
  38. });
  39. return factory.getProxy();
  40. }
  41. return obj;
  42. }
  43. }