安卓AOP demo

这篇博客介绍了如何在安卓应用中使用AspectJX插件进行AOP编程,包括在project和app的build.gradle文件中配置插件,创建注解以及Aspect的实现和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本demo插件用的是AspectJX

一、插件引入

1、project的build.gradle中配置插件
 

dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0'
        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
    }

2、app的build.gradle中配置

apply plugin: 'com.android.application'
apply plugin: 'android-aspectjx'
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.app.aoptest"
        minSdkVersion 14
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

二、开始编程

1、新建注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DoubleClickAnnotation {
}

2、新建Aspect

//新建切面DoubleClickAspect
@Aspect
public class DoubleClickAspect {

    private final String POINT_CUT_DOUBLE_CLICK = "execution(@com.suning.jr.aoptest.DoubleClickAnnotation * *(..))";

    //切入点
    @Pointcut(POINT_CUT_DOUBLE_CLICK)
    public void doubleClick() {

    }

    //advice通知
    @Around("doubleClick()")
    public void execute(ProceedingJoinPoint joinPoint) {
        try {
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            DoubleClickAnnotation annotation = signature.getMethod()
                    .getAnnotation(DoubleClickAnnotation.class);
            if (annotation != null) {
                //处理自己的逻辑
                Log.e("KKKk","点击拦截");
            }
            joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }
}

3、使用

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.bt).setOnClickListener(this);
    }

    @Override
    @DoubleClickAnnotation
    public void onClick(View v) {
    }
}

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值