AOP架构的简单使用

2024-06-24 05:38
文章标签 aop 架构 简单 使用

本文主要是介绍AOP架构的简单使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

手机App中,用户行为统计是非常重要的一部分,如何做到用户行为的统计呢,比较笨的方法是在需要统计的行为,例如朋友圈,语音等的方法的代码中,打印Log,但这样做非常的麻烦,而且工作量很大,那有没有更好的方法呢?答案就是通过AOP,那什么是AOP?
AOP是指 Aspect oriented programming,也就是面向切面编程,接下来我将展现一下如何使用AOP进行拥护行为统计,以下是我的项目目录,这里需要一个aspectJrt的jar包。
这里写图片描述
首先,我们需要编写一个注释类BehaviorTrace,用来标识方法是否要被追踪,统计

//用来标识方法是否要被追踪,统计
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface BehaviorTrace {String value();
}接着就给我们需要统计的方法进行注释
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@BehaviorTrace("摇一摇")public void play1(View view) {Log.i("MainActivity", "摇一摇被使用了");SystemClock.sleep(30);}@BehaviorTrace("语音")public void play2(View view) {int beginTime = TimeUtils.begin();SystemClock.sleep(30);/*TimeUtils.end(beginTime, "play2");*/}@BehaviorTrace("视频通话")public void play3(View view) {int beginTime = TimeUtils.begin();SystemClock.sleep(30);/*TimeUtils.end(beginTime, "play3");*/}@BehaviorTrace("商城")public void play4(View view) {int beginTime = TimeUtils.begin();SystemClock.sleep(30);/*TimeUtils.end(beginTime, "play4");*/}public void jumpToFriend(View view) {Intent i = new Intent(this,FriendActivity.class);startActivity(i);}}

编写用户行为切面

//用户行为的切面
@Aspect
public class BehaviorAspect {// 带有BehaviorTrace的方法构成了这个切面@Pointcut("execution(@com.example.aopdemo.BehaviorTrace * *(..))")public void annoHaviorTrace() {}@Around("annoHaviorTrace()")public Object weaveJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();// 类名String className = methodSignature.getDeclaringType().getSimpleName();// 方法名String mtdName = methodSignature.getName();// 功能名BehaviorTrace behaviorTrace = methodSignature.getMethod().getAnnotation(BehaviorTrace.class);String fun = behaviorTrace.value();long begin = System.currentTimeMillis();Object result = joinPoint.proceed();//方法执行后long duration = System.currentTimeMillis() - begin;Log.d("AOP", String.format("功能:%s功能,%s的%s方法执行,耗时:%d ms ", fun,className, mtdName, duration));return result;}
}

然后运行项目,当使用相应方法时,Log中打印出来的哪个方法被调用

这篇关于AOP架构的简单使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089311

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrl+shift+N,进入无痕模式3. 不需要登录(也就是访客模式)4. 两次用完,关闭无痕模式(继续重复步骤 2 - 4) 1. 打开谷歌浏览器 2. 按住ctrl+shift+N,进入无痕模式 输入网址:https://www.connectedpapers.com/ 3. 不需要登录(也就是

19.手写Spring AOP

1.Spring AOP顶层设计 2.Spring AOP执行流程 下面是代码实现 3.在 application.properties中增加如下自定义配置: #托管的类扫描包路径#scanPackage=com.gupaoedu.vip.demotemplateRoot=layouts#切面表达式expression#pointCut=public .* com.gupaoedu

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法