背景:springboot项目下,我们的代码中有很多处调用了其他系统,但是其他系统的后期可能就不调用了。要是每个代码的地方都要写一段if代码来判断下或者去逐个删除下,既费时又不安全,所以这个时候就引用了aop面向切面编程。
具体实现:
@Aspect
@Slf4j
@Component
public class SystemAspect {
@Value("${xxxx.xxxx.xxxx.xxxx.xxxx:true}")
private Boolean sysOldSystem;
@Pointcut(value = "execution(* com.xxxx.xxxx.core.feign.EgServiceClient.*(..))")
private void pointcut() {
}
@Around(value = "pointcut()")
public Object around(final ProceedingJoinPoint point) throws Throwable {
if (Boolean.FALSE.equals(sysOldSystem)) {
return ResponseResult.success(null);
} else {
return point.proceed();
}
}
}
1.${xxxx.xxxx.xxxx.xxxx.xxxx:true} 可以在对应的管理系统中配置开关为true或者false,默认是true,开。假如阿波罗等管理配置的工具;
2.注解@Pointcut,是aop面向切面编程的核心,切入点。标识匹配com.xxxx.xxxx.core.feign.EgServiceClient.这个包下的所有方法。类似于所有的日志
3.@Around(value = "pointcut()") 就是要执行的具体逻辑,调用com.xxxx.xxxx.core.feign.EgServiceClient包下的任意类的任意方法时均会调用此方法。
若是true,就扫描EgServiceClient下的方法,若是false,就不扫描。
总结:运用AOP就很好的解决了对所有指定类的操作,很棒!