Android AOP编程

1 篇文章 0 订阅

那么什么是 AOP ? 好处又有什么?
面向切面(AOP)其实就是把众多方法中的所有共有代码全部抽取出来,放置到某个地方集中管理,然后在具体运行时,再由容器动态织入这些共有代码的话,最起码可以解决两个问题:
1.1 Android程序员在编写具体的业务逻辑处理方法时,只需关心核心的业务逻辑处理,既提高了工作效率,又使代码变更简洁优雅。
1.2 在日后的维护中由于业务逻辑代码与共有代码分开存放,而且共有代码是集中存放的,因此使维护工作变得简单轻松
基础概念
- Aspect 切面:切面是切入点和通知的集合。
- PointCut 切入点:切入点是指那些通过使用一些特定的表达式过滤出来的想要切入Advice的连接点。
- Advice 通知:通知是向切点中注入的代码实现方法
- Joint Point 连接点:所有的目标方法都是连接点.
- Weaving 编织:主要是在编译期使用AJC将切面的代码注入到目标中, 并生成出代码混合过的.class的过程.

一般使用场景:日志切面,权限切面,网络切面等
基本使用:
1 下载aspectJ架包
2 安装
3 build.gradle配置
4 aspectJ安装目录下copy 一个开发包(aspectjrt.jar架包)到AS中
实例(判断是否有网络):

1.标记切点

@Target(ElementType.METHOD)//表示注解放在哪上 METHOD 方法上
@Retention(RetentionPolicy.RUNTIME)/在什么时候编译,RUNTIME运行时
public @interface CheckNet {

}

2.处理切点,切面

@Aspect  //在类上面
public class HandleCheckeNet {
    /**
     * 处理切点
     * 固定写法,"execution(@切点的包名下的切点注解方法  加上   **(..))")
**(..)代表所有方法
     */
    @Pointcut("execution(@wangandroid.com.aopdemo.CheckNet * *(..))")
    public void checkBehavior() {
    }

    /**
     * 处理切面
     */
    @Around("checkBehavior()")
    public Object checkNet(ProceedingJoinPoint joinPoint) throws Throwable {
        Log.e("TAG", "checkNet");
        // 做埋点  日志上传  权限检测 网络检测
        // 网络检测
        // 1.获取 CheckNet 注解
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        CheckNet checkNet = signature.getMethod().getAnnotation(CheckNet.class);
        if (checkNet != null) {
            //判断有没有网络,先要获取context;
            Object object = joinPoint.getThis();
            Context context = getContext(object);
            //判断是否有网络
            if (!isNetworkAvailable(context)){
                // 没有网络不要往下执行
                Toast.makeText(context,"请检查您的网络",Toast.LENGTH_LONG).show();
                return null;
            }
        }
        return joinPoint.proceed();
    }
}

3.使用

@CheckNet
public void aopTest(View view) {
     Intent intent = new Intent(MainActivity.this, Main2Activity.class);
     startActivity(intent);
    }

学会AOP,在以后的编程中就可以提高效率,使代码整洁
源代码:https://github.com/wubobo952/AopDemo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值