从C#到Java(Aspect)
1.pom.xml中导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.创建class,并加入注解
@Aspect
@Component
@Slf4j
public class PayChannelAspect {
private final String POINT_CUT = "execution(public * com.xx.xx.xx.service.xxService.*(..))";
@Autowired
private AppConfiguration appConfiguration;
@Around(POINT_CUT)
public Object doInvoke(ProceedingJoinPoint joinPoint) throws Throwable {
var appId = Arrays.stream(joinPoint.getArgs()).findFirst().orElse("N");
if (appId.equals("N")) {
log.error("参数未传");
return BaseResult.fail("参数未传");
}
var wxOpen = appConfiguration.getWx().equals("Y") ? true : false;
var aliOpen = appConfiguration.getAli().equals("Y") ? true : false;
if (!wxOpen) {
if (appId.equals(appConfiguration.getWxAppId())
|| appId.equals(appConfiguration.getMpAppId())) {
log.info("微信支付通道已经关闭,参数:" + joinPoint.getArgs());
return BaseResult.fail("微信支付通道已经关闭");
}
}
if (!aliOpen) {
if (appId.equals(appConfiguration.getAliAppId())) {
log.info("支付宝支付通道已经关闭,参数:" + joinPoint.getArgs());
return BaseResult.fail("支付宝支付通道已经关闭");
}
}
return joinPoint.proceed();
}
}
aspect包含四个注解,@Before,@After,@AfterReturning,@Around
@Before 方法执行前
@After 方法执行后,返回前
@Afterreturning 方法返回
@Around 环绕,从切面首先进入@Around -> @Before -> Method -> @Around -> @After -> @AfterReturning
如果有多个Aop切面拦截,需要在类上加入注解:@Order

浙公网安备 33010602011771号