一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于AspectJ实现AOP的开发方法、装置、设备及介质与流程

2022-06-05 05:08:10 来源:中国专利 TAG:

一种基于aspectj实现aop的开发方法、装置、设备及介质
技术领域
1.本发明涉及计算机技术领域,尤其涉及一种基于aspectj实现aop的开发方法、装置、设备及介质。


背景技术:

2.随着计算机技术的不断发展,各个应用系统之间的交互业务也越来越多。
3.面向切面编程(aop)目前在spring中已经使用非常方便,而且功能也非常强大,但在android开发中使用就非常局限。
4.在目前android客户端项目开发过程中,通常可以在manifest.xml文件中直接配置。但是,如果是在android6.0及以上的版本中对于用户隐私权限动态申请权限时,需要用户授权后才能可以使用这类型权限。然而,动态申请权限在每个业务模块中都会使用,目前这种方式使android系统不能够统一管理样式,而且使代码复用性较低,维护难度增大。


技术实现要素:

5.本发明提供了一种基于aspectj实现aop的开发方法、装置、设备及介质,能够通过面向切面编程的方式使android系统实现统一管理样式的目的,减少功能模块内部的代码耦合,从而提高代码复用性和降低功能模块的代码维护难度。
6.根据本发明的一方面,提供了一种基于aspectj实现aop的开发方法,所述方法应用于安卓系统环境,所述方法包括:
7.根据业务需求,确定自定义注解;将所述自定义注解作为切入点;
8.基于aspectj框架编写aspectj切面程序代码;
9.将所述aspectj切面程序代码注入到所述切入点中,以完成业务需求的面向切面编程。
10.可选的,自定义注解的目标元素类型包括构造方法和普通方法,注解的作用时段为编译时有效或运行时有效。
11.可选的,若aspectj切面程序代码使用注解带属性,则注解的作用时段为运行时有效。
12.可选的,根据业务需求,确定自定义注解,包括:
13.创建一个aspectj切面的类,其中,所述aspectj切面的类采用@aspect注解标注;
14.在所述aspectj切面的类中创建一个关联自定义注解的函数;
15.相应的,基于aspectj框架编写aspectj切面程序代码,包括:
16.在所述aspectj切面的类中创建一个切面函数,其中,所述切面函数的注解标注与所述关联自定义注解函数进行关联。
17.可选的,在基于aspectj框架编写aspectj切面程序代码之前,还包括:
18.基于aspectj框架,在构建工具的构建脚本中定义任务执行aspectj编译。
19.可选的,所述aspectj切面包括:检查权限切面、异步切面、检查网络切面、检查登
陆切面、日志统计切面、性能监控切面、防点击颤抖切面以及暂未开放切面。
20.根据本发明的另一方面,提供了一种基于aspectj实现aop的开发装置,所述装置应用于安卓系统环境;所述装置包括:
21.自定义注解确定模块,用于根据业务需求,确定自定义注解;将所述自定义注解作为切入点;
22.切面程序代码编写模块,用于基于aspectj框架编写aspectj切面程序代码;
23.切面程序代码注入模块,用于将所述aspectj切面程序代码注入到所述切入点中,以完成业务需求的面向切面编程。
24.根据本发明的另一方面,提供了一种电子设备,所述电子设备包括:
25.至少一个处理器;以及
26.与所述至少一个处理器通信连接的存储器;其中,
27.所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的基于aspectj实现aop的开发方法。
28.根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的基于aspectj实现aop的开发方法。
29.本发明实施例的技术方案,通过根据业务需求,确定自定义注解;将所述自定义注解作为切入点;基于aspectj框架编写aspectj切面程序代码;将所述aspectj切面程序代码注入到所述切入点中,以完成业务需求的面向切面编程。本技术方案,能够通过面向切面编程的方式使android系统实现统一管理样式的目的,减少功能模块内部的代码耦合,从而提高代码复用性和降低功能模块的代码维护难度。
30.应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
31.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
32.图1是根据本发明实施例一提供的一种基于aspectj实现aop的开发方法的流程图;
33.图2是根据本发明实施例二提供的一种基于aspectj实现aop的开发装置的结构示意图;
34.图3是实现本发明实施例三提供的一种基于aspectj实现aop的开发方法的电子设备的结构示意图;
具体实施方式
35.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的
附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
36.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
37.实施例一
38.图1为本发明实施例一提供了一种基于aspectj实现aop的开发方法的流程图,本实施例可适用于在安卓系统中实现面向切面编程的情况,该方法可以由基于aspectj实现aop的开发装置来执行,该基于aspectj实现aop的开发装置可以采用硬件和/或软件的形式实现,该基于aspectj实现aop的开发装置可配置于具有数据处理能力的电子设备中。如图1所示,该方法包括:
39.s110、根据业务需求,确定自定义注解;将所述自定义注解作为切入点。
40.本实施例的技术方案可以由后台服务器执行,应用于安卓android系统环境。其中,aop为aspect oriented programming的缩写,是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。aop是oop(面向对象程序设计,object oriented programming)的延续,是软件开发中的一个热点,利用aop可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率;aspectj是一个javatm语言的面向切面编程的无缝扩展(适用android)。
41.其中,业务需求可以理解为所有的业务模块都会存在日志统计、动态权限控制、性能监控等需求,还可以是其他业务需求。自定义注解可以是根据业务需求进行定义的,针对不同的业务需求,自定义注解的内容或者定义方式可以是不同的。切入点可以称为pointcut,可以理解为告诉代码注入工具在哪里注入特定代码的表达式(即需要在哪些joint point应用特定的advice)。此外,joint point(连接点)是程序中执行代码插入的点,例如方法调用前、方法调用时以及方法调用后,或者方法执行前、方法执行时以及方法执行后。本实施例中,android后台服务器可以根据业务需求进行确定自定义注解,并将自定义注解作为切入口。
42.具体的,关于自定义注解,在使用@interface自定义注解时,自动继承了java.lang.annotation.annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、class、string、enum)。可以通过default来声明参数的默认值。
43.本实施例定义了八个自定义注解,分别是:@checkpermission、@async、@
checklogin、@checknet、@logger、@notopen、@singleclick以及@timelog,还可以根据需求定义其他自定义注解。
44.s120、基于aspectj框架编写aspectj切面程序代码。
45.其中,aspectj是一个javatm语言的面向切面编程的无缝扩展(适用android)。aspectj切面程序代码可以是基于aspectj框架编写的。本实施例中,android后台服务器可以依赖aspectj框架,定义任务执行aspectj编译,然后基于aspectj框架编写aspectj切面程序代码。
46.其中,aspectj切面程序代码可以是用来对切面功能进行实现的代码,例如日志统计切面,需要编写的aspectj切面程序代码即为可以通过插入点插入来提取日志数据的代码。
47.s130、将所述aspectj切面程序代码注入到所述切入点中,以完成业务需求的面向切面编程。
48.其中,切入点可以是根据自定义注解作为切入点的。本实施例中,android后台服务器再编写业务代码时,可以在业务函数上使用自定义注解的注解标准函数,程序编译时,aspectj编译会将aspectj切面程序代码注入到对应的切入点中,以完成业务需求的面向切面编程。编写业务代码时只需要关系业务逻辑。程序运行时会业务函数前后执行各个切面。示例性的,性能监控@timelog的代码语言可以采用如下设计:
[0049][0050]
上述代码将打印该函数执行的时间。
[0051]
示例性的,检查权限@checkpermission
[0052][0053]
上述代码会动态申请定位权限,假如用户不允许该权限,函数内的日志不会打印出来。
[0054]
本发明实施例的技术方案,通过根据业务需求,确定自定义注解;将所述自定义注解作为切入点;基于aspectj框架编写aspectj切面程序代码;将所述aspectj切面程序代码
注入到所述切入点中,以完成业务需求的面向切面编程。本技术方案,能够通过面向切面编程的方式使android系统实现统一管理样式的目的,减少功能模块内部的代码耦合,从而提高代码复用性和降低功能模块的代码维护难度。
[0055]
在本实施例中,可选的,自定义注解的目标元素类型包括构造方法和普通方法,注解的作用时段为编译时有效或运行时有效。
[0056]
其中,在java中有构造方法和普通方法。普通方法可以理解为完成特定功能的代码块。构造方法可以理解为给对象的数据进行初始化的。本实施例中的自定义注解的目标元素类型为构造方案或普通方法,注解作用时段为编译时有效或者运行时有效。本方案通过这样的设置,限定了自定义注解的目标元素类型和作用时段,更便于使用自定义注解。
[0057]
在本实施例中,可选的,若aspectj切面程序代码使用注解带属性,则注解的作用时段为运行时有效。
[0058]
其中,注解带属性可以是注解带权限或者值等属性。本实施例中若aspectj切面程序代码使用注解带属性,则注解的作用时段为运行时有效。示例性的,若aspectj切面程序代码需要使用注解带属性,那注解作用时段是运行时有效。以自定义注解检查权限checkpermission为例:
[0059][0060]
aspectj切面程序代码在运行时需要知道业务代码需要申请的具体权限(value的值),所以注解作用时段是运行时有效。
[0061]
本方案通过这样的设置,当切面程序代码需要使用注解带属性时,那注解作用时段为运行时有效,更便于使用自定义注解。
[0062]
在本实施例中,可选的,根据业务需求,确定自定义注解,包括:创建一个aspectj切面的类,其中,所述aspectj切面的类采用@aspect注解标注;在所述aspectj切面的类中创建一个关联自定义注解的函数;相应的,基于aspectj框架编写aspectj切面程序代码,包括:在所述aspectj切面的类中创建一个切面函数,其中,所述切面函数的注解标注与所述关联自定义注解函数进行关联。
[0063]
其中,aspect可以是声明类似于java中的类声明,在aspect中会包含着一些pointcut(切入点)以及相应的advice(通知)。advice也就是需要被注入到.class字节码文件的代码;通常有三种before,after和around,分别是在目标方法执行前,执行后以及替换目标代码执行。
[0064]
本实施例中根据业务需求,确定自定义注解;根据自定义注解作为切入点,基于aspectj框架编写aspectj切面程序代码。本实施例中android后台服务器可以创建一个aspectj切面的类,aspectj切面的类采用@aspect注解标注;在aspectj切面的类中创建一个关联自定义注解的函数;然后在所述aspectj切面的类中创建一个切面函数,该切面函数
的注解标注与关联自定义注解函数进行关联。
[0065]
示例性的,编写切面程序步骤如下,以检查权限切面checkpermissionaspect为例说明:
[0066]
1.创建一个checkpermissionaspect的类,该类使用@aspect注解标注。
[0067]
2.创建一个函数checkpermission(),该函数使用@pointcut("
[0068]
@within(com.mark.aoplibrary.annotation.checkpermission)||@annotation(com.mark.aoplibrary.annotation.checkpermission)")注解标注。
[0069]
3.创建一个aroundjoinpoint(proceedingjoinpoint joinpoint)函数,该函数使用@around("execution(!synthetic**(..))&&checkpermission()")注解标注,函数内部实现权限检查及权限动态申请逻辑,假如权限用户已经允许或者动态申请成功后直接通过joinpoint.proceed()执行业务方法。如果用户不允许权限则统一提示用户未获取权限不能执行该业务。本实施例中可以通过横向扩展,实现其他切面程序代码。
[0070]
本方案通过这样的设置,能够基于aspectj框架编写aspectj切面程序代码,在编写业务代码使用自定义注解函数,便于程序编译时aspectj编译向切入点插入对应的aspectj切面程序代码进行使用。
[0071]
在本实施例中,可选的,在基于aspectj框架编写aspectj切面程序代码之前,还包括:基于aspectj框架,在构建工具的构建脚本中定义任务执行aspectj编译。
[0072]
其中,构建工具可以是gradle,一个基于jvm的构建工具,是一款通用灵活的构建工具,android项目的构建工具。本实施例中可以在android项目的build.gradle文件中依赖aspectj编译工具,然后通过在gradle构建脚本中定义任务来执行aspectj编译。本方案通过这样的设置,能够在android项目中执行aspectj编译,从而实现面对切面编程。
[0073]
在本实施例中,可选的,所述aspectj切面包括:检查权限切面、异步切面、检查网络切面、检查登陆切面、日志统计切面、性能监控切面、防点击颤抖切面以及暂未开放切面。
[0074]
其中,检查权限切面checkpermissionaspect可以理解为业务代码在该切面下,执行业务代码前必须执行权限检查和动态权限申请,如果用户不允许权限则统一提示用户未获取权限不能执行该业务。异步切面asyncaspect:异步切面,业务代码在该切面下,执行在子线程中,开发人员无需在耗时业务代码中自己去开辟子线程。检查网络切面checknetaspect可以理解为业务代码在该切面下,网络请求前判断网络异常跳转至无网络页面或者网络设置页面。日志统计切面loggeraspect可以理解为业务代码在该切面下,业务代码执行前打印该业务函数的函数名、所有参数,执行后打印该业务函数返回结果。性能监控切面timelogaspect可以理解为业务代码在该切面下,业务代码执行后打印该业务函数执行所花的时间。防点击颤抖切面singleclickaspect可以理解为界面点击事件在该切面下,防止重复点击,多次执行点击事件。暂未开放切面notopenaspect可以理解为功能暂未开放切面,业务代码在该切面下,不会执行,会给用户统一提示功能暂未开放。
[0075]
本方案通过这样的设置,能够通过自定义注解多个注解,从而完成多个aspectj切面的使用,能够使android系统统一管理样式,减少耦合,从而提高代码复用性。
[0076]
实施例二
[0077]
图2为本发明实施例二提供的一种基于aspectj实现aop的开发装置的结构示意图。如图2所示,所述装置应用于安卓系统环境;该装置包括:
[0078]
自定义注解确定模块210,用于根据业务需求,确定自定义注解;将所述自定义注解作为切入点。
[0079]
切面程序代码编写模块220,用于基于aspectj框架编写aspectj切面程序代码。
[0080]
切面程序代码注入模块230,用于将所述aspectj切面程序代码注入到所述切入点中,以完成业务需求的面向切面编程。
[0081]
可选的,自定义注解的目标元素类型包括构造方法和普通方法,注解的作用时段为编译时有效或运行时有效。
[0082]
可选的,若aspectj切面程序代码使用注解带属性,则注解的作用时段为运行时有效。
[0083]
可选的,所述自定义注解确定模块210,具体用于:
[0084]
创建一个aspectj切面的类,其中,所述aspectj切面的类采用@aspect注解标注;
[0085]
在所述aspectj切面的类中创建一个关联自定义注解的函数;
[0086]
相应的,所述切面程序代码编写模块220,具体用于:
[0087]
在所述aspectj切面的类中创建一个切面函数,其中,所述切面函数的注解标注与所述关联自定义注解函数进行关联。
[0088]
可选的,所述装置还包括:
[0089]
aspectj编译执行模块,具体用于在基于aspectj框架编写aspectj切面程序代码之前,基于aspectj框架,在构建工具的构建脚本中定义任务执行aspectj编译。
[0090]
可选的,所述aspectj切面包括:检查权限切面、异步切面、检查网络切面、检查登陆切面、日志统计切面、性能监控切面、防点击颤抖切面以及暂未开放切面。
[0091]
本发明实施例所提供的一种基于aspectj实现aop的开发装置可执行本发明任意实施例所提供的一种基于aspectj实现aop的开发方法,具备执行方法相应的功能模块和有益效果。
[0092]
实施例三
[0093]
图3示出了可以用来实施本发明的实施例的电子设备10的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
[0094]
如图3所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(rom)12、随机访问存储器(ram)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(rom)12中的计算机程序或者从存储单元18加载到随机访问存储器(ram)13中的计算机程序,来执行各种适当的动作和处理。在ram 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、rom 12以及ram 13通过总线14彼此相连。输入/输出(i/o)接口15也连接至总线14。
[0095]
电子设备10中的多个部件连接至i/o接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸
如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0096]
处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如基于aspectj实现aop的开发方法。
[0097]
在一些实施例中,基于aspectj实现aop的开发方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由rom 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到ram 13并由处理器11执行时,可以执行上文描述的基于aspectj实现aop的开发方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行基于aspectj实现aop的开发方法。
[0098]
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0099]
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0100]
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0101]
为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0102]
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)、区块链网络和互联网。
[0103]
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务中,存在的管理难度大,业务扩展性弱的缺陷。
[0104]
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
[0105]
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献