Aop切面编程

Aop原理
https://blog.csdn.net/xwh_1230/article/details/78225258

1:定义AspectJ类

@Aspect
public class PermissionAspect {

   private static final String POINTCUT_METHOD =
        "execution(@xxx.xxx.xxx.xxx.PermissionCheck * *(..))";

private static final String POINTCUT_CONSTRUCTOR =
        "execution(@xxx.xxx.xxx.xxx.PermissionCheck *.new(..))";

      @Pointcut(POINTCUT_METHOD)
public void methodAnnotatedWithPermissionCheck() {}

@Pointcut(POINTCUT_CONSTRUCTOR)
public void constructorAnnotatedPermissionCheck() {}

@Around("methodAnnotatedWithPermissionCheck() || constructorAnnotatedPermissionCheck()")
public Object weaveJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {
    MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
    Method method = methodSignature.getMethod();
    PermissionCheck auth = method.getAnnotation(PermissionCheck.class);
    String permission = auth.permission();
    int code = auth.code();

 if(MovieProPermissionUtil.checkSelfPermission(Application.getContext(), permission)){
            return joinPoint.proceed();//有权限,则执行所拦截的方法
           } else {
               if (joinPoint.getThis() instanceof Activity) {
                  MPermissions.requestPermissions((Activity) joinPoint.getThis(), code, permission);
                  }else if (joinPoint.getThis() instanceof Fragment) {
                      MPermissions.requestPermissions((Fragment) joinPoint.getThis(), code, permission);
                  }
                  return null;//没有权限,这不做操作
            }
      }
}

2:定义注解

@Retention(RetentionPolicy.CLASS)
@Target({ ElementType.CONSTRUCTOR, ElementType.METHOD })
public @interface PermissionCheck {
     String permission();
     int code() default 0;
 }

3:使用

@PermissionCheck(permission=Manifest.permission.READ_EXTERNAL_STORAGE, code= 
ExternalStoragePermission.CODE_READ_EXTERNAL_STORAGE)
@Override
public void onChooseAlbumClick() {
    navigator.toImagePick(this, 1, true, PHOTO_PICK_REQUEST);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容