package com.aop; import android.support.design.widget.Snackbar; import android.view.View; import com.App; import com.C; import com.apt.TRouter; import com.base.util.SpUtil; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; /** * Created by baixiaokang * 通过CheckLogin注解检查用户是否登陆注解,通过aop切片的方式在编译期间织入源代码中 * 功能:检查用户是否登陆,未登录则提示登录,不会执行下面的逻辑 */ @Aspect public class CheckLoginAspect { @Pointcut("execution(@com.app.annotation.aspect.CheckLogin * *(..))")//方法切入点 public void methodAnnotated() { } @Around("methodAnnotated()")//在连接点进行方法替换 public void aroundJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable { if (null == SpUtil.getUser()) { Snackbar.make(App.getAppContext().getCurActivity().getWindow().getDecorView(), "请先登录!", Snackbar.LENGTH_LONG) .setAction("登录", new View.OnClickListener() { @Override public void onClick(View view) { TRouter.go(C.LOGIN); } }).show(); return; } joinPoint.proceed();//执行原方法 } }