00:00
哈喽,咱们这个视频呢,主要给大家去呃讲述一下在鸿蒙开发当中,我们如何实现一个a op, 呃代码插装能力,相信大家在市场上啊见到过很多功能,你比如说第三方的一些统计啊,像有像友盟啊,对吧,神测等等,嗯,我们集成它呢,对吧,只是通过初始化,然后注入了一个代码,但是他们怎么样来统计我们页面的访问量呢?那么或者说他们是怎么捕获到啊,我们当前程序,哎发生了一些问题呢?哎,这就是哎用到的是op OPP.行,我们先去,嗯,简单去阐述一下对吧,什么叫MP。啊,这里我给大家准备了一个文档,大家可以呃。去看一下咱们本篇呃视频呢,呃还是老规矩,我们是基于那个API13的,呃本次视频呢,也从以下以下几个方面去给大家去阐述,比如说我们可以在方法之前对吧入函数,方法之后还插入函数,还有我们的一个呃如何去替换我们当前啊某个对某个对象或者是某个类里面的一个呃函数。
01:27
啊,首先呢是op op呢oo什么是op op呢op op也就是哎这有一段那个它的一个名词解释啊,也就是aspect orien知room对吧,它是一种那个编程的复质,旨在呢,呃,通过分离那个横切的一个关注点,来提高我们代码的一个哎模块化。嗯,将一些我们常见的一些关注点啊叭,如说我们的日志记录啊,对吧,还有一些事务管理啊,以及那个安全控制啊,对吧,从核心的业务逻辑中分离出来,使咱们的代码啊更容易维护和扩展,其实提到OVP啊,大家最常见的就是一些日志的记录啊,比如说AOB,对吧,可以在我们不修改啊原有业务的情况下,通过呢代码啊查装的一个方式为我们的应用程序呢,来添加日志的功能,当然了,除了一些日志功能之外呢啊。
02:28
在开头的时候对吧,也给大家家去说了,可能我们啊见过很多的三分的统计和有蒙神测等等,对吧?呃,他们就是用来OV来来实现我们统计页面的一个,呃,访问量同样的,呃,关于那个市场上一些那个关于那个异常的统计呢,其实大部分也是通过我们一个op v形式,其实a op说的简单直白一点就是怎么了它可以实现啊,我们对原有的对象的方法在执行前或者说执行后进行插装,嗯,同样在咱们鸿蒙的开发当中呢,哎,我们也可以直接对其方法进行替换操作,对吧?呃,当然这个是在AAAPI11之后,呃,才出来了一个方法,就是aspect这个对象。
03:19
行,我们先去重点去讲述啊,鸿蒙当中的话,呃,三个功能,那么咱们先讲述第一个,那么第一个呢,就是说在方法之前,哎,去插入函数。通过按按比赋这个方法,那我们可以在指定的类对象的原方法执行前对吧,我们插入一个函数对吧?执行顺序就会先执行插入的函数,然后后执行原有的函数,那么这种情况下呢,我们就可以对一些原有的哎属性啊。或者说呃,原有的逻辑进行相关修改,那么按照比方呢,它有几个参数啊,我们需要注意。
04:01
对吧,第一个参数就能target的class,这个类型呢,是一个public类型,它是指定的对象,就是你要在哪个对象来进行插入,第二个就是一个my name, 这个是一个方法,就是我们要针对哪一个方法,呃,作为一个修改,还有一个就是is stick, 就是你指定的方法是否为,哎,静态啊,如果是true,那么就代表静态,False呢,就代表我们常规的一个普通的一个实例方法。Before呢,它是一个function,就是要插入的一个,哎,函数对象说函数中有参数呢,对吧,得第一个参数this,呃,第一个参数是this对象。其余参数呢,就是原方法的一个一个参数,OK, 那么咱们先去针对哎,方法之前我们插入函数,然后修改我们原有的逻辑,我们先去简单的去。做一个案例给大家去讲述一下,嗯,这个案例呢,我们直接用代码的形式给大家去去讲述吧,就是怎么样去在方法执行前去修改原有的逻辑,OK, 我们回到我们的一个项目,项目很简单,对吧,还是我们的一个担保工程,这里呢,呃,我们去创建一个。
05:20
类,因为我们要对这个类,也就是这个对象中的方法进行那个呃修改,所以说这里呢,我们去创建一个类。很简单对吧,一个test,我们这个test呢,定义了我们的。变量。我们给他叫,嗯,经济元一米。好,定义变量之后,我们再定义一个获取这个变量的方法。
06:12
把我们当前这个内幕给他发过去,很简单对吧,一个变量一个方法。对吧,很简单,一个变量,一个方法,那我们在我们当前这个UI里面,我们能给他写一个,呃,点击事件吧,用来获取我们当前定义的类中的一个,呃方法,哎,我们定义一个8。OK, 我们让这个button居中吧,我们给外层的这个。容器靠拢,给他设置一个百分之百。
07:05
内存的。也设置为百分之百,我们给他一个居中吧。Just container.Flex online center.好,在这个点击事件里面,我们主要对这个对象进行一个实例化操作。好。把我们对象哎实例化之后,我们先去正常去打印一下我们这个里面的一个方法,看他会打印什么。加上我们的一个test,哎,Get name.咱们去运营。
08:01
那按照正常的而言,他会把这个程序员域名给咱们去打印出来,对吧?来我们看一下这。那么,晴空下,日。哎,点击一下。对吧,没有问题,程序员一名,OK, 这是一个很简单的一个,呃,我们把我们当前的这个name啊给返回了过去,OK, 那我们现在呢,就要执行一下它的插座能力,那么我们刚才已经说了,对吧,看我们的文档对吧。怎么实现它呢?通过。Aspect对吧,Aspect这个对象OK,这个对象呢,它是。它是在我们的呃,U包下面来,我们直接给他U。To有一个aspect,哎,这个对象里面有我们的一个and before, 就是在我们的方法前去执行逻辑,OK an比before,那么第一个呢,就是我们的什么test对象,就是你的当前的对象。
09:08
OK, 那么第二个呢,就是我们的一个。你的方法的名字对吧。第三个呢,就是我们,呃,是否是尽量不是对吧。那么最后一个呢,就是我们的方式。这个呢,这个里面呢,就是我们的一个开始对象。OK, 我们要在这里面去执行一个什么逻辑呢?就是把我们的内容给他,怎么着给他。哎,修改一下。对吧,来我们看一下。嗯,我们让我们这个S的。点一个内等于一个。刚才我们初始化是程序员一名是吧?来我作修改一下。
10:02
改成程序员。OK, 来,我们去打印一下。啊,我们一起运行一下。好,他有没有实现我们这个呃方法对吧,针对逻辑的修改呢,我们去庆祝一下,按照正常逻辑而言,对吧,我们第一个对吧,打印的是程序员域名,因为我们对这个带对这个方法进行一个查抄能力,把我们的内幕呢,修改成了一个程序员大名,如果说他修改成功,那么我们再次打印它的话,这个方法它就进行了。打印成了程序的大米,对吧,来我们看一下。哎,对吧,程序员一名是咱们正常的一个方法输出,当你对这个方法对吧,呃,执行的一个逻辑修改,也就是按这个按德比说,就是在方法前啊进行啊逻辑修改,哎,我们。
11:13
我们发现我们的内幕已经发生了变化,OK, 所以说鸿蒙当中的查账能力还是非常非常简单的,就是如果说大家想在这个方法执行之前,哎,你去修改一些逻辑。对,比如说修改方法啊,我们就可以通过哎安德比赋,然后去实现啊,我们的一个查找能力,OK, 那么这个呢,是在一个方法前啊,我们。再去看它第2个就是方法之后。嗯,什么方法之后呢,方法之后就是an after对吧。是在指定的类方法执行之后插入一段逻辑,那么最终返回值呢,是插入函数执行之后的返回值,对吧?上一个特点就是我们在方法执行前,那么这个特点呢,就是怎么呢?这个功能呢,就是我们在方法之后对吧?如果说你想要在方法之后,对么经添加一些逻辑或者增加一些功能,哎,我们就可以通过安达法,它跟那个安德比弗尔其实参数是差不多的。
12:21
当然了,它有一点不同的是,它是带有返回值的,OK, 那么也是四个参数,第一个参数呢,就是指定的类对项,第二个参数呢,就是ma的name,就是我们指定的一个原画文名,第三第三个就是一个sta,你是否是静态的?第4个是after对吧?要插入的函数对吧?函数有参数时,哎,则第一个类类似对象对吧?嗯,OK, 我们针对这个and after, 然后我们做一个简单的案例啊。好,我们还是这个代码,还是这个代码,然后嗯。
13:02
还是这个代码对吧,我们这个对象呢,也不变对吧,很简单对吧,一个内容一个是呃。Get的内容,然后我们要修改的是啥呢?就是由an的比F,我们把这个给它取消掉。给大家四处出来。这个是在方法前。做一个备注吧。好,下面我们要演示的是。方法后修改逻辑,那么方法后修改逻辑呢,它也是通过哎阿斯贝克的对吧,这个对象。我们直接有一个。And after.点一个。And after, 第一个呢,就是我们你要修改的对象。
14:05
第二个呢,就是你的名,你的那个方法名字。第3个是否是静态方法等于false,第4个呢?哎,就是你的当前的。函数。Test.OK, 我们在这里面呢,怎么着,我们在这里面也去怎么着去修改一下啊,我们的这个内对吧,我们也是把这个。那改为程序员。大米,OK, 那么改为程序员,呃,大名的话,那么我们呃,因为它它它和那个安德比夫使用还是不太一样的,我们去看一下啊。
15:00
它是最终返回值,是插入之后的返回值,所以说我们呃要给他一个是返回值,第二它是原方法的返回值,OK, 我们给它一个返回值。对吧,我们给他一个。返回,值返回,把我们的成绩的大名给他返回过去吧。嗯。首先呢,我们。输在这里面,输入一条日志吧。这是我们的。应该是吧吧。原始方法,我们在这里给他。嗯,这是追加之后的。这修改之后。黑板之后。然后我们在这个里面也给他加一条。加一条安心日志吧。
16:03
打印日,然后。打印来看一条日志吧。很简单对吧,来我们去。运行一下,看看它最终的一个执行执行执行程序啊。来点击一下。哎,我们可以发现对吧,第一个你先先输出来一个原始的一个方法没问题,第二个呢,呃,就是我们一条。打印日,那么第三呢,就是我们呃,修改了。对吧,修改了我们的一个,呃。内蒙的这个。这个这个这个属性对吧,这个就是通过是阿尔法的,就是在方法之后,哎,方法之后我们修改完之后,对其呃作为了一个返问值,那么我们在修改之后呢,哎,我们同样的,呃。
17:05
把我们的这个呃方法对吧,又追加了一个逻辑,这个逻辑呢,就是针对原有的属性作为了一个修改,好这个就是我们的一个是after after是在方法之后,哎,我们去修改这个,嗯。这个逻辑。嗯,有一条有一个需要注意的点啊。来,我们去看一下。就是说我们把an的比赋换成an的阿的,其他逻辑不变,需要注意的是,最终返回值呢?是插入函数执行之后的返回值,也就是意味着最后打印的阿尔法的函数,对吧?函数对吧,返回值这个大家一定一定要注意啊,按我们的最终打印对吧,首先是原始方法,然后你的呃。方法之后对吧,修改了一个逻辑,就打印一条日志,然后修改之后我们针对这个内幕又做了又做了一个修改啊获取的是哎,程序的大米,OK, 这是我们的什么原始哎。
18:08
啊,这是我们的after。这个功能OK,那么我们去看一看它下一个功能点啊,它下一个功能点就是什么。替换,替换函数就是如果说你既不想在函数之前修改,也不想在函数之后修改,我就是想把这个原有的函数给它替换。哎,过程当中也给给咱们提供了一个replace方法,它会将指定的类方法中的原始方法替换为哎,另一个函数,对吧?Replace接口执行完成后只会执行替换后的逻辑对吧,原有的。逻辑呢?不再执行,这个一定要记住啊,以,并且方法已经替换了,OK.它也有四个参数啊,我们去看一下它跟的class类类对象对吧,Ma内原始同方啊意思这是不是静态对吧。
19:03
Instant对吧,需要替换的原方法的一个函数,同样的我们也是以这个代码案例,然后我们去给大家去。讲述一下OK,那么我们就在原有的方法中来,我们给他去执行一个打印对吧,验证一下到底对吧,听完之后。还走不走?OK, 原始方法打印,我们这是方法替换。通过aspect的含义也是aspect。Re.Please.我们呢?你的当前的对象?你的当前的哎。方法名字。是否是静态for?
20:00
嗯。我们的。不行。OK, 好,我们在这个里面呢,就很简单对吧,我们在这个里面呢,呃,去把我们的那个。内容继续修改一下。就在我们的同学,他。在这里面呢,我们也去去输出一条知识。打印调试,同样的,我们把我们这个,呃。也一个我们当前的,呃,一个。发位置,OK.
21:00
呃,我们直接直接打印啊,就是修改之后。嗯。我们把这个也给它注销掉。对吧,看看我们这个是get的内幕对吧。当前这个get name如会不会打印我们这个原始方法,毕竟他已经把方法进行修改了,对吧。来,我们去运营一下。我们可以发现啊,执行完这个点击之后呢,首先呢,会打印一条日志,对吧,就是我们的替换方法里面的这个逻辑。而后呢,我们进行打印的修改之后的一个逻辑,直接打印的就是我们的程序员大米对吧,而没有说去输出我们原始方法的打印,这说明怎么着,我们原始的方法已经被替换了。
22:03
OK, 这就是我们的呃,鸿蒙当中的aspect的呃,这个功能的三呃三个功能啊,就是方法之前替换,方法之后呃替换,以及我们的respect,呃以及我们的replace就是一个呃方法的一个替换,OK, 基本上咱们本次视频呢,主要很简单,主要给大家就介绍了这三个功能,非常简单,对吧。And before and after replace对吧?方法执行前,方法执行后,呃,最后的方法替换,嗯,正确的,我们的在实际开发中啊,如果说我们正确的能够运用到AOPP,那么我们可以提升我们代码的一个模块化复用性对吧,可维护性和灵活性,同时降低了耦合度对吧?使我们的系统更易于扩展和维护,当然了。也是希望大家在实际的开发中能够呃正确的去运用这个n obb, 而不是说我们为了实为了实现对吧,本来我们这个功能非常简单对吧,你偏偏使用AOB,然后去实现它。
23:09
对吧,这显得有点是得不偿失,所以说呃,在开发中呢,我们还是正确的去对待这个obb的一个查账能力。好。咱们本次视频就到这里,谢谢大家。
我来说两句