前言
比如我们做复杂的业务的时候、难免会产生多张表的交互、为了insert、delete、update不让他少我多的情况下、小编就写了这篇文章来做为解决方案!
1. 导入依赖
<!--aop切面依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.7.4</version>
</dependency>
2. 直接复制以下代码
- BusinessAspect
package com.jmh.quartz.medical;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
/**
* 业务页面: 针对业务逻辑进行判断
*/
@SuppressWarnings("all")
@Aspect
@Component
@Slf4j
public class BusinessAspect {
@Around("@annotation(BusinessValid)")
@SneakyThrows
public Object invoke(ProceedingJoinPoint point) {
MethodSignature methodSignature = (MethodSignature) point.getSignature();
BusinessValid annotation = methodSignature.getMethod().getAnnotation(BusinessValid.class);
Integer i = (Integer) point.proceed();
log.warn("打印的数据:{}", i);
if (i == 0) {
throw new RuntimeException(annotation.value());
}
return i;
}
}
- BusinessValid
package com.jmh.quartz.medical;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@SuppressWarnings("all")
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface BusinessValid {
String value() default "未知业务异常";
}
3. 使用方案
- 在service层实现类上加以下注解
@Transactional(rollbackFor = Exception.class)
- 在service层实现类想处理的方法上加以下注解
@BusinessValid("内容自定义...")