Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AOP架构的简单使用

AOP架构的简单使用

作者头像
老马的编程之旅
发布于 2022-06-22 01:52:37
发布于 2022-06-22 01:52:37
39100
代码可运行
举报
文章被收录于专栏:深入理解Android深入理解Android
运行总次数:0
代码可运行

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

首先,我们需要编写一个注释类BehaviorTrace,用来标识方法是否要被追踪,统计

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//用来标识方法是否要被追踪,统计
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface BehaviorTrace {
    String value();
}

接着就给我们需要统计的方法进行注释
public class MainActivity extends Activity {

    @Override
    protected 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);

    }

}

编写用户行为切面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//用户行为的切面
@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中打印出来的哪个方法被调用

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行 ( 定义连接点注解 | 定义 Aspect 切面 | 定义切入点 | 逐个处理切入点的各个连接点 )
要监控哪些方法 , 首先要对该方法添加注解 , 该注解标记哪些方法是 Join Point 连接点 , 所有被该注解标记的方法构成 一组 Join Point 连接点 , 即 Point Cut 切入点 ;
韩曙亮
2023/03/29
8420
【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行 ( 定义连接点注解 | 定义 Aspect 切面 | 定义切入点 | 逐个处理切入点的各个连接点 )
Android--AOP架构设计之使用AspectJ监测方法耗时
AspectJ是一个客户端,拥有自己的编译器,所以要在Gradle中指定,使用AspectJ的编译器进行编译
aruba
2021/12/06
1.1K0
Android--AOP架构设计之使用AspectJ监测方法耗时
利用AOP对点击事件作防抖处理
可能第一个想到的方法是在 OnClickListener.onClick 中根据时间间隔来判断,这也是比较传统的方案。但是缺点同样也很明显,就是对现有代码的侵入性太强了。因为点击事件回调的代码我们早已写好了,现在再去改动会很痛苦,并且改动的范围也很广。
俞其荣
2019/03/08
1.7K0
面向切面编程(AOP)在Android中的应用
AOP,字面翻译为面向切面编程。它是一种编程思想,不是什么新技术。可以这么理解,在Android开发过程中,我们经常会在我们的具体业务代码中加入全局性、系统性的与具体业务无关的代码。比如埋点、动态申请权限等等。AOP的思想就是将这些与业务无关的系统性的功能解耦出来,让代码看起来更清晰一点。使用AOP思想与正常程序流程的对比我们可以通过下面示例图片有个基础的认识:
吴延宝
2018/10/18
2.6K0
面向切面编程(AOP)在Android中的应用
Spring Boot2(六):使用Spring Boot整合AOP面向切面编程
众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转。本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理。
鸟不拉屎
2019/07/04
11.4K0
Spring Boot学习 - Spring Boot AOP记录用户操作日志
在Spring框架中,使用AOP配合自定义注解可以方便的实现用户操作的监控。 先引入依赖 <!-- aop依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 自定义注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTI
Li_XiaoJin
2022/06/10
6720
Spring Boot学习 - Spring Boot AOP记录用户操作日志
Android项目实战(六十二):AOP实现防止重复点击
到此即实现了AOP的配置,接下来只需要在使用的方法前加上@SingleClick注解即可。当执行添加了@SingleClick注解的方法便会进去切面方法进行重复点击的相关判断
听着music睡
2022/05/07
1.2K0
当RxJava遇到AOP
公司打算开发一款全新的To C产品,因此我开始做一些搭建框架的事儿以及POC。新的产品能够使用一些比较新的技术,在新产品中我大量使用了Rx。这就导致了原先的AOP框架在某些场景下是无法使用的,借此机会我顺便升级了一下原先的AOP框架。
fengzhizi715
2018/08/24
4380
当RxJava遇到AOP
Spring AOP(一) AOP基本概念
 Spring框架自诞生之日就拯救我等程序员于水火之中,它有两大法宝,一个是IoC控制反转,另一个便是AOP面向切面编程。今日我们就来破一下它的AOP法宝,以便以后也能自由使出一手AOP大法。
程序员历小冰
2019/02/11
5030
Spring AOP(一) AOP基本概念
强悍的Spring之AOP使用
Spring中使用注解方式实现AOP,采用@AspectJ方式实现,首先确定需要切入的方法,也就是连接点
你呀不牛
2021/05/28
6470
AOP及@Aspect 注解使用详解
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
xcbeyond
2020/03/25
3.5K0
Spring Boot 之优雅使用 AOP
简述何为AOP AOP为Aspect Oriented Programming的缩写,意思是面向切面编程,通过预编译的方式和运行时动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑进行分离,降低耦合度,提高可重用性,提高开发效率。 主要用途 日志记录 事务处理 异常处理 安全处理 性能统计 ··· 在Spring Boot中使用AOP记录接口访问记录 1.添加依赖 <dependency> <groupId>org.springframework.boot</groupId>
Bobby
2019/06/11
9120
归纳AOP在Android开发中的几种常见用法
它是一种关注点分离的技术。我们软件开发时经常提一个词叫做“业务逻辑”或者“业务功能”,我们的代码主要就是实现某种特定的业务逻辑。但是我们往往不能专注于业务逻辑,比如我们写业务逻辑代码的同时,还要写事务管理、缓存、日志等等通用化的功能,而且每个业务功能都要和这些业务功能混在一起,非常非常地痛苦。为了将业务功能的关注点和通用化功能的关注点分离开来,就出现了AOP技术。
fengzhizi715
2018/08/24
1K0
归纳AOP在Android开发中的几种常见用法
Springboot整合AOP和注解,实现丰富的切面功能
我们在文章《Spring AOP与AspectJ的对比及应用》介绍了AOP的使用,这篇文章讲解一下AOP与注解的整合,通过注解来使用AOP,会非常方便。为了简便,我们还是来实现一个计时的功能。
Jensen_97
2023/07/20
3780
Springboot整合AOP和注解,实现丰富的切面功能
Spring Boot AOP 扫盲
大家好,我是二哥呀。AOP 是 Spring 体系中非常重要的两个概念之一(另外一个是 IoC),今天这篇文章就来带大家通过实战的方式,在编程猫 SpringBoot 项目中使用 AOP 技术为 controller 层添加一个切面来实现接口访问的统一日志记录。
沉默王二
2022/03/07
5730
Spring Boot AOP 扫盲
开发实践,通过AOP来拦截注解实现业务日志记录功能
AOP(Aspect Oriented Programming)是一种编程思想,它允许在运行时动态地修改对象的行为。在 Java 中,AOP 是使用 AspectJ 实现的。AspectJ 既可以在编译时织入代码,也可以在运行时动态织入代码。
用户1289394
2023/08/22
2440
开发实践,通过AOP来拦截注解实现业务日志记录功能
简单聊聊AspectJ
考虑一个要在某些应用中实施安全策略的问题。安全性是贯穿于系统所有模块间的问题,而且每一模块都必须添加安全性才能保证整个应用的安全性,并且安全性模块自身也需要安全性. 传统的面向对象编程中,每个单元就是一个类,而类似于安全性这方面的问题,它们通常不能集中在一个类中处理因为它们横跨多个类,这就导致了代码无法重用,它们是不可靠 和不可承继的,这样可维护性差而且产生了大量代码冗余,这是我们不愿意看到的。 使用传统的编程解决此问题非常的困难而且容易产生差错,这就正是 AspectJ 发挥作用的时候了。
提莫队长
2020/06/02
1.2K0
java之Spring 框架实战: AOP
@After, @Before, @Around 定义 建言(advice); 这 3 个注解的参数 就是 切点(PointCut) , 所谓 切点 其实就是一个 拦截规则(可以由注解定义, 也可以由方法规则定义).
IT工作者
2022/07/04
3540
Spring Boot如何利用AOP巧妙记录操作日志?
SpringAOP的相关的知识点包括源码解析,我已经在之前的文章中详细说明,如果对AOP的概念还不是特别清晰的话。
烂猪皮
2021/01/14
1.2K0
Spring Boot如何利用AOP巧妙记录操作日志?
如何使用SpringBoot AOP 记录操作日志、异常日志?
平时我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能;我们在操作某些功能时也有可能会发生异常,但是每次发生异常要定位原因我们都要到服务器去查询日志才能找到,而且也不能对发生的异常进行统计,从而改进我们的项目,要是能做个功能专门来记录操作日志和异常日志那就好了。
全栈程序员站长
2021/06/29
9.1K3
推荐阅读
相关推荐
【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行 ( 定义连接点注解 | 定义 Aspect 切面 | 定义切入点 | 逐个处理切入点的各个连接点 )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档