00:00
各位,在刚才的内容中呢,我们完成了a op操作的准备工作,包括引入了相关的依赖,另外讲到了切入点表达式,通过它能配置对哪个类中的哪个方法经增强,然后咱们下面就具体演示基于派G的注解方式,还有叉L配置方式,实现对a op的这个操作,那我们来写一下。A op的操作,首先呢,我们先基于这个注解方式实现对pad的操作。然后咱们再实现基于这个叉L配置文件方式对我的这的操作。咱们啊,把这两个方式给各位都做演示,那首先我们先基于注解方式,通过PAJ把这个a op的这个操作完成,那怎么做一步一步给各位详细写一下,首先里边的第一部分,咱们就先创建一个类,然后在这个类里边。
01:11
我们定义这么一个方法,然后咱们实现对这个类中的方法做一个增强,这是我们的第一步,就是这个类我们可以称为叫一个被增强类,那咱们把这个快速写出来,这是我们的第一部分。然后我现在在这里边呢,我就首先建个包,这个包比如我们就叫做a op,在a op的包里边,咱们首先我们创建一个类啊,当然这个包为了明显我给它换个名字,因为咱们首先用的是注解方式,我叫这个。Annotation ano,给他换个名字。然后换完之后在里边咱串一个类这类,比如我起个名字,我就叫这个。User,然后在user里边我来创建一个方法,就是这个方法我就叫做A的一个添加的方法,然后在方法中我们给它做这么一个输出,比如说这里边我就给它输出描述,这个叫A的。
02:14
所以这样的话,咱们把这个方法和这个类我们就串出来了,这是我们的第一部分,就是写一个类和方法,然后咱们要实现对这个类中的方法做个增强,所以咱们下面进入到第二步。那我写一下第二步怎么做呢?咱就创建一个增强的一个类,什么叫增强类,就是你要对这个方法做增强,然后咱增强写什么逻辑,这里边我们就写这么一类,也就里边。编写你增强的那个逻辑,那咱们把这个写下。大家来实现啊,比如现在呢,在里边我再建个类,这个类我就叫user。Per。这是一个类,然后在类里边怎么做呢?给大家强调,咱们需要在这个类中。
03:07
就是在这个增强的类里面创建。就是方法,然后我们让不同的这个方法代表不同的通知类型,那什么意思,给各位写的具体点,比如现在我写个方法。方法名字随便起,假如这个方法名字,我就叫这个be before,为了咱明写before。然后这个方法中,比如现在里边我做个输出,我就输入一个叫before。这些方法写完之后,比如想做件事情,我想让这个方法在我这个A的方法之前置情,就是咱之前说那个前置通知,让这方法作为前置通知方法,这是我们一个增强类,那这怎么做,给各位来写一下,当然里边得有那个,就是五种数类型,咱先以这个before为例,然后一会儿再写其他方法。
04:01
那我把这个注释写的完善点啊,首先第一个类右侧类,咱是一个被。增强的一个类就是增强理论的方法,然后这个user是一个。增强的类在里边,然后一个方法叫before before我想做一个叫前置通知,就是在我这个A的方法之前,把这个比后方法做个执行,这是我们要做的事情,这个啊,咱们把它写出来了,然后写完之后咱怎么做呢?在里边我们就要做这个具体的这么一个配置。我把这个代码先截过来,然后下面咱做这个具体配置,咱看怎么来实现。这个啊,先复制,就是第二部分创建增强类,然后创建之后我们看第三部分,第三部分呢,就进行这个就是通知的这么一个配置,那怎么做给各位写一下啊,首先在配置中的第一部分,因为咱是基于注解做到的,所以我第一部分啊,在W的配置文件中先做件事情,叫开启注解的扫描,这咱们之前提到过,这个扫描呢,你可以写个配置类,也可以写个配置文件,但是咱们现在就通过配置文件做到,但是写配置类也可以实现,咱之前也都写过,就那个完全注解开发,那这是我们做的这步,那咱们把这个一会写出来,然后写完之后第二部分咱就使用注解来创建你这个user,还有这个user。
05:36
Policy这么两个对象把这创建,就是咱们在类上面加那个comment,或者其他三个注解,把这个创建,这是我们的第二部分,然后做完之后我们还有第三步,我把步骤先写完,然后再写代码,代码比较简单。第三步怎么做呢?我们的做法就是在你的增强的那上边添加一个注解。
06:02
被注解叫做aspect。它就表示咱要用这个类生成你这类的一个代理对象,加个,然后加上之后第四部分咱需要在。配置文件中做件事情,这个事情叫做开启那个代理的这么一个对象,就是开启生成代理的这个对象的这么一个内容,就是写一段配置,然后把这个做到,所以咱们下面要做的就是这么一个事情。那现在咱们一步一步给各位把它写出来啊,咱来实现,首先第一个,因为咱用配置文件吧,我在里边先建一个配置文件。把这个先创建出来,比如我叫这个B,一点叉L,然后创建之后,因为配置文件中呢,需要用到一些相关的名称空间,那我们写一下第一个用到一个叫contest,咱之前说到过,我在里边直接复制。
07:04
咱改一下第一个我来一个冒号叫contest,后面加上contest,然后下面写上它的这个具体内容。把这个啊,咱给他写出来。然后这里边我们叫conest,这位置也叫contest,把这个加上,然后这个加上之后,因为咱一会儿用到up up就是咱们说那个开启生成代理对象,这过程中还需要用到名称空间,这个名称空间的名字叫a up,所以咱们需要再来一个这个叫。A op。然后这里边叫up,下面也是加上它这个对应的这么一个XSD的这么一个。结构啊,咱们把这个也加上。然后给他改一下啊,这里边我们叫。A op,然后这个是a op a op,所以这样的话,咱们把配置文件中的这个名称空间就引入了,然后引入之后做第一部分,第一部分就是开启你那个注解的扫描,因为咱要用注解方式做这个对象创建,包括使用注入。
08:18
那咱来开启一下啊,在里边我们就加上一个叫contest com刊,然后加一个叫base package里边加一个com.a硅谷就这么写就可以了啊,但是现在我们这里边可以写的更具体点,在你这个a op AO里边都是可以的啊,比如现在我就写一个a op。啊就是啊上分五点上a op p no啊就扫描这里边的这个对象,这个啊是我们开启。这个注解的扫描,或者说开启组件的扫描,把这个我们就做到了。然后把这单配置给各位分过来,所以把它能够快速弄出来,应该并不复杂啊,然后这个做到之后,第二部分咱用注解把两个类的对象创建,那我们创建一下,在右侧类上边加一个注解,就是这个这加一个。
09:14
Confidence,然后我们在这个user process上边也加这个注解,就是confidence,把这个咱给它加上。然后这部分我就直接给各位截个图啊,咱直接拿过来,就是用注解方式把两个类的对象我们都进行创建。一个user,一个user per就是一个增强类,一个被增强类。这个啊,第二部分完成了,然后完成之后我们的第三步,咱需要在增强的那上边加个注解,让它能够生成你那个代理对象,那咱看增强类是不是proceed,这上边加个注解,注解叫做ape。把这个加成。
10:00
这注解就表示它要生成你这么一个。代理对象。这个啊是我们的第三部分,所以说这个步骤是比较固定的。把这个给各位截过来,然后这个做到之后,最后一步,咱需要在配置文件中开启那个生成注意对象,就开启这个J生成对象,那咱们来写下最后一步。我在这个位置写一下啊。咱们。这里边的做法就是开启这个派G。生成代理的对象,然后在里边加一个叫a up aspect j two这样的话就可以了,加这个,而这句话什么意思呢?说的通俗点啊,它就到你这里边找下你的类上边,若发现类上边有这个我的派的这这个注解,那他就把这个对象生成一个代理对象,就做这事情,只要有没有注解,有注解生成代理对象,所以咱们现在把这步完成了,就是开启S派特J生成那个代理对象。
11:11
这个啊做到了,所以咱们现在把里面的前面这些步骤都完成了,咱们快速看一遍啊,第一步创建。被增强类第二步增强类,然后咱们开启扫描创建对象,包括加上派表示生成代理对象,最后开启这个东西,这样的话完成了第三步,然后第三完成之后,下面咱做第四步。第四步干什么呢?我强调啊,因为刚才我们想做这个效果,想要这个方法,在我这A的方法之前是不是执行,就是做一个前置通知,所以我们的最后一步干什么?就是配置你不同类型的通知,因为咱们有几种类型,咱说过是不是有五种类型,前置后置这些类型,所以咱们要配置不同类型通知,这是第四步,那怎么做给各位最终来配置一下啊,做法很简单,咱做法就是在你那个作为就是五种通知类型的方法上边加上你那个就是通知的注解,然后使用切入点表达式,最终完成。
12:22
我写一下。就是在我们增强内斗。里边。在这个作为通知的。方法上边添加你通知类型的注解,并且使用那个叫切入点表达式。来配置我们这个内容,所以咱们现在就是来做这个事情,那各位写下啊,咱们来到增强类是它这里边方法叫before,然后在before上面咱加个注解,大家看这注解啊,注意别导错,是我拍的J中的before,这表示做前置通知,然后在before里边咱可以加上那个叫切入点表达式,我们来一个Y啊,当然Y可以省略啊,这注解名字可以省略,然后里边加上咱那表达式。
13:15
不知各位是否记得啊,咱们刚才说到过,咱快速看一下啊。我们加什么,是不是这个execution,然后加上你这个结构啊,那我们来写一下啊,Execution,然后在里边第一个我加个星号,表示所有的反修饰符,然后第二部分加上咱那个包的路径,我写一个com.a硅谷。点上这个SPRING5。点上这个就是,呃,应该是a PI noano。然后点上里边那个user方法,因为咱们要增强里边那个A的方法,把A的方法写出来,然后里边加两个点代表它的参数列表,所以这样的话,在那里边就写出来了这么一个注解,在before上面加个before注解。
14:08
而各位记住啊,这里边我们写这个before注解。它就表示作为是一个叫前置通知,就是在你的增强方法的前面执行里边,用切入点表达式指定你哪个类中的哪个方法咱要做一个增强,所以这样的话,把这个我们就完成了。这个啊,是我们写的构这么一个结构,然后我把这部分给各位复制过来啊,咱们到我们的这个底中来,就最后一步配置你的这个。不同通知类型,咱们现在配置是一个先是通知,所以这样的话代码就写完了,然后写完之后,咱们最后把这效果我们来测试一下,看一下最终的这么一个结果,那我们来测试啊。比如现在我在里面建个包,就叫test。
15:03
然后test里边呢,我们写一个类,这类我就叫test。A op在里边写一个测试方法。咱们加个test public weight,我就叫test这个AAO啊,就是这个注解方式。然后在里边呢,按照咱们的结构,首先肯定还是加载这个配置文件。咱们new一个卡pass里边加上这个叫B一点叉啊,这是第一部分,然后第二部分咱是得到这个对象get b,因为咱们要增强user里边方法,所以得到肯定是这个user啊,肯定是它user。加一个user点。Class。把这个啊,我们给它就是得到引入这个依赖啊user啊,把这个user。
16:00
引入依赖啊,然后引之后得到我们这对象,得到对象之后,咱现在就调用user中的A的方法看效果,因为我们要做的效果叫前置通知,也就是说啊,在user方法之前,这比before方法是不是要执行叫前置,最终如果效果正确,它会先出出before,是不是再数列A等,因为这叫前置通知吗?那咱们把效果最终试一下啊,到这里边我们来执行。诶点错了啊,我们最终给他做一个执行,然后咱们看结果啊。啊,这个啊,我先删掉啊,然后咱们把它执行一下啊,刚才我点这个重编译了啊,应该点这个运行。咱们看最终的结果是什么样的。大家看效果啊,咱们清楚的看到,先输入谁是before,是不是这个方法中的那种,然后再输入谁是是A的,它就表示在你的这个A的方法之前执行了before这个方法,这就完成一个叫前置通知,所以咱们把这个我们就做到了啊,各位把这过程给他要知道。
17:15
然后我特别强调,我们在测试的时候呢,你要执行的是你的这个增被增强类中的方法,因为咱要增强这个A,所以你要把它调用,而这个u pro它是被就是增强方法里面这个会在你的这个A之前做个执行。这个你要明确啊,就是咱们的测试方式,把user类的对象得到,然后调A的方法,在A的方法之前会执行,里边这个叫比before方法,所以这样的话,咱们把这个就完成了啊,这是咱说的这个叫做前置通知。所以各位通过过程把这药特别熟悉,然后这个完成之后呢,在我们这个通知中,因为它有五种通知类型,那我现在把剩下几种类型给各位都给它写出来啊,那我们来写一下啊,比如现在这里边我们写第二个注解。
18:09
大家看这个注解。叫after,它有一个叫after after returning,还有一个after啊,里边有这个注意那我们先写一个after,然后在里边也是写上一个切入点,表达式跟上面一样。然后这里边咱下面写这方法,Public比这个方法我就叫。After。然后在里边我们给它做一个输出啊,这个叫after。这个啊,是我们写的这么一个通知after,然后除了他之外,下面还有几种通知给各位都写出来啊,还有几个。然后选完之后,最后咱再做个比较,比如下面还有一个什么呢?它叫after,这个东西叫returning。然后比如说现在我把这个写出来,然后里边做一个输出。
19:01
After。Returning。然后这里边我们是一个叫。啊,就这个啊,这是after after啊,写这个一样的啊,然后除了这个之外,我们还有一种通知,它叫什么呢?给大家写一下,它叫做after这个通知。就是咱说那个异常通知我先都写出来,然后一会儿效果咱都会演示出来啊,咱把这些补充完整,因为就是加几个注解,把这个做个输出。这是一个通知,然后除了他之外,还有最后一个通知,这通知写法要稍微麻烦点,它叫around,这是什么?它叫环绕通知。我要特别说说,这个叫做环绕。通知。然后里边我们叫这个around啊,比如这个方法名字我也叫a around,那什么叫环绕通知特别说一下,因为前面都好理解,这环绕稍微麻烦点,环绕就表示啊,它会在你这个方法之前和之后都执行,比如现在我想增强里边的A的方法,它会在A的之前和A的之后都经之行,这叫环绕,那怎么做?比如现在我给他写一个输出啊,比如现在我写一个就是。
20:15
这么写啊,我叫环绕之前。然后我再来一个叫环绕之后。当然各位注意,在你环绕之前之后的中间,是不是你那个被增强那个方法啊,就是我们被增强的方法要执行,也就是我们的A的方案要执行,那怎么做呢?在这里边有一个参数,我写一下,它叫proceed draw point。再加上它,然后咱们调里边的一个方法,这方法叫proceed,它就表示执行你那个被增强的方法,把它都执行,然后这里边有异常,要把异常给他。Throw一下啊,这异常直接走那个这个异常。
21:03
所以这是关于叫环绕这个通知啊,里边是这个特点,所以现在呢,我这里边把里边的几种通知类型我们都写出来了,然后都写来之后,咱下面把这个给他执行一下,看一下目前有什么效果,因为现在这些都写出来了。来看什么特点啊。大家看我们发现是不是执行了很多呀,你看啊,环绕之前,环绕之后在A的前后是不是行了,这是b before就是前置,另外咱要特别说这两通知,一个叫after,一个叫after returning,咱们也发现啊,这两通知是不是都在这个A的之后执行的,那我说一下这两个它们有什么区别,然后各位给头特别是知道一下啊,就这两个有什么区别。那咱先说里边这个after,给大家强调,After什么意思呢?它是表示在我的方法执行之后执行,就叫after,然后这个after returning什么意思?它那return它就表示在你方法返回结果之后执行,就是两个都是在方法之后执行,但是他们有一个区别,After是在你方法之后执行,然后这个after returning是你在返回值之后进行执行。
22:20
啊,所以他们有一定的区别啊,这各位给他知道一下,然后咱发现现在这些都执行了,但是有一个没执行。打开哪个没执行。大家看到。这是没执行啊,那这是什么?给各位强调,它就叫做异常通知。这叫异常通知,那什么是异常通知呢?就是现在,比如我要增强A的方法,当你A的方法在执行过程中有异常,那它才会执行,如果我现在A的没有异常,他就不会执行,那我现在为了明显,我在A中给他手动模拟个异常,给咱尿,随便来一个,让这个。
23:01
除以零是不是有异常,然后咱们看目前的效果什么样的啊,给各位执行一下啊,咱们看啊目前有异常了,A的方法中我手动做了一个异常,然后这异常就是零不能做除数,大家看目前的特点是怎么样的?咱发现啊,目前什么特点。大家看什么特点,你发现啊异常通知是不是执行了,但你发现谁没有执行。注意跟上我的思路啊,谁没有执行第一个。环绕之后被执行吧,第二个这个after re returning是没有执行,所以目前有这个特点啊,也就是说我强调啊,这after这个注解,它这个异常就是它这个通知,咱一般也可以叫什么,也可以叫成叫最终通知,就你现在不管有没有异常它都执行,而after returning咱一般叫后置通知啊,一般我们这么来说,但是在有的书里边啊,他把这after returning也叫返回通知,这不同数里边有不同叫法,各位记一种就足够了,你就记住。
24:06
Al,这个注解的通知,它不管你有没有异常都执行,而阿瑞春ing当有异常它就不执行啊,所以里边是这个特点,给大家写一下啊,这after这个注解我们可以叫做。最终通知,而阿这个re returning,咱可以叫后置通知,或者说有的书里边也叫做返回通知,因为不同书里边叫法不一样,各位就记一种就可以了,你主要记住它的特点啊,咱不用纠结它到底叫什么,只要你记住它不同的特点。所以现在咱就把这几种通知都完成了配置。我把这段代码给各位。重新分过来啊,然后咱们再快速重复一遍,说一下里边这个特点。给大家强调啊,就最后这个配置在这里边呢,咱可以在这个增强类中写不同方法,让每个方法实现不同通知,Before代表是前置通知,就是方法之前执行,这after returning和after都是方法后执行。
25:13
但是它们有区别,After returning表示在你返回结果后执行,After就是方法之后就执行啊,所以这两个是有区别的,而这个after也可以称为叫最终通知,就有异常,它也执行,但是re returning有异常,它不执行。这子柔影叫异常通知,当你方法有异常才执行,另外这个叫环绕,在方法之前和之后都执行,咱通过这个参数能让你的被增强方法在里面执行,所以这就是关于咱们用基于我的pad j注解方式实现五种通知类型配置,咱把它就最终完成了。所以各位把这几种配置给他自己去手动测试一遍。
26:00
这个啊,我们就完成了。
我来说两句