00:01
来呃,接下来呢,我们来给大家说一下,通过这个XL的方式啊,来去配置一下我们刚刚使用的这个切面啊,就是我们这个S接,呃,那么我们在一开始呢,也提到,呃,就是这个SP的接呢,我们既可以使用注解,当然了也可以使用我们的xma这个配置来去完成啊呃,那么接下来我们就来看一下怎么去使用这个XM的配置来去完成啊,那么我们主要是要需要用到这么几个啊配置啊,就是a op conig,然后呢,在这个a con里面呢,我们去指定上我们的具体的这个切面,然后呢,在切面里面呢,我们要去指定上我们具体的一些通知啊等等一些就可以把它什么组织起来,然后呢去使用了,好吧,我们还是通过我们这个实际的一个啊代码来去给大家讲解啊,OK,回到我们这个开发工具里面,呃,首先呢,我们先把我们刚刚写的这个包啊,就是这个包下面说的类看到了吧,我来把它完整的拷贝一份。
01:01
好,我就不叫ation了,而是叫XL,看明白了吧,然叫成XL啊,然后呢,在这个包下面的这个类中呢,大家注意啊,呃,因为我们现在是要基于这个XL的方式呢,来去配置我们的切面啊,但是呢,我需要给大家去讲明白一个问题,呃,那你说我像类似于这种注解还能不能用啊,能不能用?啊。大家听我说啊,就是,呃,大家一定要这个记清楚了啊,不是说你使用了X猫以后呢,我的蜘蛛解就完全不能用了,也是能用了,对吧?现在我们主要做的是什么呢?通过XL的方式呢,去配置我们的切面,而像这种组件扫描,就是我想把它管理到我的这个L,管理到LC容器中,像这种注解我们是依旧可以去什么使用的,也就意味着我们是可以使用注解跟这个XL的配合起来去用的,不是说我只能单单纯的去使用其中的一个。
02:02
能明白这个意思吧,OK,所以说像这种的话呢,你依旧是可以使用的啊,当然了啊,如果你不想用它的也行,那你如果不用这个注解的话,像这个你就得什么以B的方式,是不是给它配置到我们这个LC容器中啊,能理解这个意思吧,OK啊,所以说呢,哎,我们就啊在写的时候呢,啊,使用哪种方式都是可以的啊,你使用注解也行,或者是使用我们的X帽也可以啊,但是啊,大家注意,对于我们这个切面里面的话呢,像这些东西我们就肯定是不要了的,对吧,你要如果你还加他的话,那你还是一个注解的形式,那现在我希望是一个XL的形式啊,所以说呢,呃,像这个注解我们依旧是可以留着啊,或者说呢,我们干脆把它也干掉。对吧?啊,那我们就把这个东西给它去掉吧,我们就呃,全部都使用XL给大家来演示一下啊,啊,那像这个生命切的表达式,这肯定也不用了啊,像这个所有的注解你都去掉就行了,明白了吧?啊,都把它去掉,去掉以后呢,我们统一使用XL的方式来配置好来,都把它去掉,看到了吧,那么同样道理还有一个啊,就是我们的呃,Validation这个也给大家都去掉来,这里面也都去掉。
03:14
诶,怎么又回到这儿了?来把它去掉啊,没了吧,OK,两个前面都没有注解的,然后呢,呃,还有什么地方加过注解啊,没了吧,你看一下接口里面肯定是不可能加的了啊,虽然我们这个具体的时材类以及我们两个的切面都没有注解了,那么接下来我们就来通过X码来配置,呃,首先呢,我们还需要一个配置文件,我把这个来拷贝一下啊,我就叫什么呀,叫做X ma啊,然后呢,在这个配置文件中,呃,那么现在我们压根就没有使用任何注解,像这个组件扫描还需要吗?啊,不需要了,那如果说呃,像我的这个基本的实现类上面,像这个上面如果说还要注解的话,那你那个组件扫描呢,就一定还得有,要不它就不能被管理到LC总体中了,听懂了吧,OK啊,现在我没有的话呢,那这里面也就无所谓了,都把它去掉就行了啊好,那接下来呢,我们这个还需不需要啊。
04:17
这个是基于注解来去使用的吧,那现在我不用注解了,它也不需要了,能明白吧?哎,那你说我们这里面需要配什么东西啊,配什么东西啊?哎,这里面我们需要配的就是这么些个东西啊,首先哎,你的目标是不是得有啊是吧?哎,我们看了哈,目标对象你肯定得有了,然后呢,我们的切面是不是也得有啊,对吧?切面有了以后呢,接下来我们就可以配置我们的这个a op了。能明白了吧,来吧,先把这个目标配一下,目标的话呢,就是我们刚才提到的就是它啊,所以说呢,我们把这个来全类名拷贝一下来到我们的配置文件中,通过一个B的形式把它配出来,就相当于又回到我们最开始通过SR的方式来配置B了,好ID你指定一下class呢,你给它指定一下好ID的话呢,我就叫。
05:11
类名首字母小写了啊,我们就简单一点,能看懂了吗?哎,就把它配好了,好,那么这个变完以后呢,接下来就是我们的这个切面了,其实这个切面的话,它本身也是一个并了啊,因此呢,我们也需要通过并的形式呢,把这两个切面呢,先给它什么配置进来,所以说呢,你看了啊,也写一个宾ID class,我们叫什么,就叫做logging aspect,注意啊,用的是X这个包下来的啊,用的是它来吧,把这个呢也给大家写到这儿。好,同样的道理,我们再来一个好ID,等于什么呀,就是什么啊,下面写个class啊,就是我们的validation,好,Aspect来把它也拷贝一下。
06:02
好,把这个大写的改成一个小写就行了,看明白了吗?好,但是大家注意啊,我们我们认为它是一个切面,但是呢,你把这个并配置进来以后,Spring知道它是一个切面帽,不知道不知道它就是一个普通的病啊,就是一个普通的病,因此接下来才是我们配置的一个重点,那么我们要用什么来配呢?我们需要用到一个a op config这个标签,当然啊,前提是你必须要去导入我们的a op的命名空间啊,因为我们刚刚已经导过了啊,所以说呢,我们就直接来用,那么这是我们的一个AOPP的一个配置,那么对于这个AOPP的配置来讲,其实我们主要关心的是哪些啊,就是切面是谁对吧?切面中的通知以及我们的切入点表达式,你想一下是不是就是这些东西啊,嗯,对吧,OK,所以说我们在配置的时候呢,你就要去朝着这几个诶方向去考虑,首先这个切面我怎么把它表示出来呢,我们可以使用一个注意。
07:02
A op SPA,你看这是不是来配置切面的,那么在这个里面的话,我们可以使用一个ref,比如说我想去配置我的日志切面,而我的日志切面是不是就是这个病啊,对吧?那我就把这个logging aspect给它放到这儿,相当于就是什么呀,它既是一个组件,然后又是一个切面,就相当于你加那两个注解的效果吗?能明白了吗?OK,配置进来,那么切面有了以后,切面里面我们要考虑的是不是就是我们的通知了,对吧?所以说这个才是我们真正的一个切面,而切面里面呢,就是我们的通知的,这个是能理解的吧,切面中包含通知嘛,那我们在这里面写通知,通知的话就是什么呀?你看一下a op before,然后呢,A after a。After returning,然后呢,A什么呀,After throwing,然后呢,我们是不是讲过一个a op啊,Around是不是这么些个东西啊,对吧,那么你挨个来写就行了吗?对于麦色的来讲,你看一下我现在的我这个前置通知的方法名叫什么呀?是不是就叫做before麦色的?
08:14
对不对?哎,我就要把这个before method给他拷贝过来放到这了,告诉他这个方法就是我的一个前置通知理解了吗?能听懂吧?OK,但是我们来想哈,呃,我们当初使用注解来开发的话,因为我直接把注解标到了这个方法上面了,所以说我就不用说指定这个方法名了,你都标到这个方法上面了,那很明显用的就是它了嘛,那么我们在这个注解里面是不是写了一个切入点表达式啊,对吧?那这个切入点表达式我们肯定也是要给人家去表示出来的,比如说你这个前置通知,你要作用到哪些目标上面。能明白这个意思吧,所以说你可能要去写你的切流量表达式,那切量表达式的话,我们在这里面可以通过什么呀,通过point cut来去给它定义出来,或者说呢,我们使用一个point cut ref来去什么呀,做一个引用,那么我们知道,因为我们现在写的这几个通知里面用的切入端表达式几乎都是一样的吧,对吧,所以说我们就不必要说在每个里面都去写这个切入端表达式,而是呢,我统一的把这个切入端表达式呢,给它定义到什么呀,外面我们作为一个重用,那怎么配呢?这里面就有一个a op啊point卡看到了吧,来,那你就把你刚刚写的那个切量表达式来,我们来啊,重新写一下吧,啊,就是这个包吧。
09:35
是现在是不是这个包了。好,来这个方怎么写呢,你看了哈,呃。Exclusion,然后呢,修代表是任意修饰符,任意返回值,然后呢,这个包下面的所有的类的所有的方法,然后呢,括号点点是不是写好了,对不对,那取个ID,比如说我们就叫做什么呀,啊my point cut,好,那么这样的话呢,我们把这个切入点表达式统一给它定义到这个位置,然后呢,在每个通知里面,我就可以直接使用point cut ref去引用了,比如说就叫什么my point cut,那你把它指引到这,这就引用过来。
10:14
明白了吗?那假如说你其中的某一个通知,它的这个切入点表达式呢,跟这个有点区别,那么你就可以在某个通知里面直接使用point cut,重新再去声明一个切入键表达式,这就可以了,能理解了吧?OK,但是现在我们都是一样的啊,那我就不会再去声明了。好,接着往后写后置通知,那就是我们的after method,来把它拷贝过来,往这一放好,放到这里面,那么这里面我们依旧要去使用我们的point cut ref,去实现我们的my point cut,好返回通知呢。啊,都是麦的吧,来CTRLC把它拷贝过来,然后呢,这里面我们依旧写这个point rf,是不是还是用这个my point对吧?好,那么这个地方还是要给大家去说一下返回通知呢,我们是可以获取到方法的返回值的,而你在这个地方呢,已经定义好了接收返回值的这个参数名叫做result吧,那么我们就需要在我的返回通知里面依旧去使用一个returning来去指定叫做result,能看懂吗?所以说现在大家应该慢慢的去感受出来了,你切你这个注解,你所做的事,你在XM里面同样也需要去做。
11:35
是不是,但是相比较而言的话,是不是注解要比这个简单很多啊,对不对啊,好,那接着往后写吧,像这个异常通知那就是一个。异常的异常我给删了是吧,刚才是不小心给删了。哎,好在这是吧啊,我眼睛出问题了,这个是吧?啊,我居然没看到啊,来吧,把他拷贝过来啊,这是我们异常通知,那么同样道理,Point r cut ref用的就是它,然后呢,这里面我们就要写一个你要跟谁对应啊,跟你的这个ex做对应嘛,那么这里面写的就是一个ex。
12:19
看懂了吗?那明白了吧,OK,好,那对于我们这个环绕同志来讲的话就更简单了,你就直接把你的方法名字往这一放就行了,Around method,那放到这这就行了,好,这里面的话你也写一个point cut my point,诶,这就把它配好了。看明白了吗?所以说现在你来对比一下,我们在注解里面要做的是像这个通知的注解,我们现在是通过一个这样的一个配置来去表现的,然后呢,注解的话直接标到方法名字上面,直接标到方法上,而我们XL的方式呢,就要去指定你用的是哪个方法,然后呢,切入点表达式呢,我们是直接写到这个注解里面的,而这个位置呢,我们就需要单独的去给它做一个指令,反正就是你注解做过的事,你XL里面你同样也要去做。
13:08
肯定是少不了的。没问题吧,OK,好,那这时候我们配好了其中的一个切面,好,那这个我就注释掉啊,我们暂时不会用它,我们就还是用这四个通知,那比如说我还还有一个切面,我怎么办啊,那你就在这个AOB里面,这是一个切面吗?你再配置一个切面不就行了吗?对不对啊,这里面你再通过ref去指向谁呀,指向你的这个切面嘛,While data aspect往这一放,然后呢,这个里面呢,你可以怎么写了,不就是通知了吗?A op before是不是啊,然后在我们这个里面呢,它也有一个什么前置通知,也叫做before method来CTRLCL拷贝过来,也把它放到这儿,然后呢,像那个切入点表达式呢,我依旧可以去使用我的这个切入量表达式啊,叫做什么呀?My point touch,这才好,是不是简单了吧?OK,好,那么再来想这两个通知,这两个前面都写到这了,那么你们就有一个优先级的问题了,怎么解决优先级的问题呢?你通过注解它是一个。
14:15
Al的注解,那么通过XL配置的话呢,注意在每一个aspect里面都有一个凹的属性,能看到吗?这个地方也有一个二的属性,那么你同样它是一,它是二,那么优先级就是什么呀,它比较高,然后呢,就是它了,嗯,看明白了吗?嗯,所以说呃,基于这个XL的这个配置跟这个注解的配置来讲,你所要做的事儿都是一样的,只不过是形式不一样,但是呢,大家从我这个配置这个过程中呢,大家应该能感受出来肯定是谁呀,XL的要复杂一点吧,对吧?哎,为什么我们要推荐大家去使用注解呢?因为注解开发起来确实是很快。明白了吧,确实是很快啊,好,那我把这个做完以后呢,我们也来做一个简单的测试啊,大家来看回到我们这个测试类里面啊,就是XL的这个慢放法里面,测试的时候呢,大家注意哈,你先把这些呃,我看一下啊,好像也不用改什么了吧,你看这个我来从我的LC容器中把这个改一下,我是不是要读这个XL这个文件了,对吧,读到它,然后呢,这里面的话,我们获取到我们的这个目标对不对,那么其实获取到是一个代理对象,然后呢,再去调我们的这个方法,我们再来看一下效果是不是一样的。
15:32
大家看一下这个效果一样不一样一样一样吧,哎,这个begin小东西的是吧,哎,你看这个效果是不是一样的。没有任何问题吧,OK,所以说呢,你不管是基于这个注解也好,或者说基于这个XL方式也好,你所做的事肯定是一模一样的。对吧,而且XL呢,相对来讲还会更复杂一点,那么因此呢,最终要告诉大家的是,XL的配置你必须得能看得懂啊,如果说你能把它掌握了,能自己配出来,那当然更好,但是基于注解的方式你一定要会。
16:07
听懂了吗?一定要会啊,这是最基本的要求了,你重点你必须得会。明白了吧,OK,好,那我们就给大家演示这么多啊。
我来说两句