1.pom.xml中導入依賴java
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
2.建立class,並加入註解spring
@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 方法執行前app
@After 方法執行後,返回前spring-boot
@Afterreturning 方法返回微信支付
@Around 環繞,從切面首先進入@Around -> @Before -> Method -> @Around -> @After -> @AfterReturningspa
若是有多個Aop切面攔截,須要在類上加入註解:@Orderxml