Android AOP介绍及实现原理,android简历

本文介绍了Android中使用AspectJ实现AOP的原理和步骤,包括定义DebugLog注解、设置PointCut以及定义Advice。通过注解和AspectJ,简化了在方法前后添加Log和权限检查的繁琐工作。此外,还分享了Android AOP库aoplib的创建,并提供了相关代码示例。
摘要由CSDN通过智能技术生成

protected void onPause() {

super.onPause();

Log.e(TAG, “onPause”);

}

protected void onStop() {

super.onStop();

Log.e(TAG, “onStop”);

}

protected void onDestroy() {

super.onDestroy();

Log.e(TAG, “onDestroy”);

}

private void checkPhoneState(){

if(checkPermission(“android.permission.READ_PHONE_STATE”)== false){

Log.e(TAG,“have no permission to read phone state”);

return;

}

Log.e(TAG,“Read Phone State succeed”);

return;

}

private boolean checkPermission(String permissionName){

try{

PackageManager pm = getPackageManager();

//调用PackageMangaer的checkPermission函数,检查自己是否申明使用某权限

int nret = pm.checkPermission(permissionName,getPackageName());

return nret == PackageManager.PERMISSION_GRANTED;

}…

}

}

代码很简单。但是从这个小例子中,你也会发现要是这个程序比较复杂的话,到处都加Log,或者在某些特殊函数加权限检查的代码,真的是一件挺繁琐的事情。

三、使用AspectJ在Android中实现Aop


AOP虽然是方法论,但就好像OOP中的Java一样,一些先行者也开发了一套语言来支持AOP。目前用得比较火的就是AspectJ了,它是一种几乎和Java完全一样的语言,而且完全兼容Java(AspectJ应该就是一种扩展Java,但它不是像Groovy[1]那样的拓展。)。当然,除了使用AspectJ特殊的语言外,AspectJ还支持原生的Java,只要加上对应的AspectJ注解就好。

用AspectJ的方法很简单,首先是定义一个DebugLog注解:

import java.lang.annotation.Retention;

import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.CONSTRUCTOR;

import static java.lang.annotation.ElementType.METHOD;

import static java.lang.annotation.ElementType.TYPE;

import static java.lang.annotation.RetentionPolicy.CLASS;

@Target({TYPE, METHOD, CONSTRUCTOR}) @Retention(CLASS)

public @interface DebugLog {

}

接下来就是使用AspectJ的方式,其设置PointCut:

@Aspect

public class Hugo {

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值