00:01
各位同学大家好,刚才呢,我们介绍了a op的基本概念以及相关的术语,那下面呢,我们用spring进行a op的具体操作,在润里边进行A操作,它也是基于两种方式,第一种基于注解实现,第二个基于叉lo配置文件实现,那咱们先演示基于注解该怎么去做。在演示之前,咱们还是把这个动态代理的概念给大家再做一个详细的说明,那这里边我来写一下这个动态代理,因为A的底层用的就是动态代理,那首先我们说第一个内容,动态代理的这个分类。然后它分成哪些呢?给大家说明,它有两类,一类叫做JDK的动态代理。然后还有第二部分叫做CGB的动态代理,它有两个分类,那这两个具体什么意思,咱们来做一个说明,大家看我这个图里边啊,这里写到上面,这里边有一个PAJ,在咱一会说咱往下看,它有两种情况,第一种情况,当你代理的这个对象是一个有接口情况,第二个是没有接口,如果有接口的时候,那他用的一个叫DDK的动态代理,如果没有接口用的是CJ live的动态代理,那咱们在这里边给大家来画一下。
01:30
首先第一个情况就是有接口。有接口的时候呢,它使用的是JDK的动态代理,然后他怎么做的呢?给大家具体写一下,你可以列为它就生成一个你的这个接口,实现类的一个代理对象。这是它的一个过程,那咱们给大家画个图,画的更具体点,再来具体说明一下。
02:01
所以各位啊,画到这里。比如说我现在啊,这一部分我们有一个接口。跑到这里啊,它就是一个接口,我们叫interface。然后接口呢,肯定对应有一个实线类,我想这位置啊,它就叫实线类。这是我们写到的啊,接口肯定是有实现类,实现类实现这个接口,然后过程中,比如现在我们想用动态代理来增强里面的方法,那怎么做呢?那我们就要创建接口实现类的代理对象,说的简单点啊,我们的这个代理类也要实现这个接口,只是代理类咱不是直接出来的,但是跟出来的对象具有相同的效果,就类似于我这里写到的,这里写到代理对象和目标对象都实现相同的借口,他就相当于两个兄弟啊,他这个拜把兄弟了这个过程。
03:01
记住我们说的。JDK的对外代理。这是咱们的这句话。代理对象和目标对象都实现了相同的接口。然后这张图给它进一步完善一下,就是我们在这个位置,我们这个代理,然后代理呢,它也实现了这个口。这是我们说的第一种情况,叫做JDK的动态代理,各位法律知道,然后除了这个之外,动态代理还有第二个情况,第二个情况是什么呢?它叫CD方式,那给各位讲这里边。如果说啊,你没有接口,那个时候使用就是CJ Li的动态代理,而这个是怎么做的呢?给大家做个说明,你可以理解为啊,它生成的是一个什么,是一个子类的一个。代理对象就是他继承了这个目标,这个类生成了一个子类代理对象,就类似我这里写的这段话,通过继承被代理的目标类实现这个代理的过程。
04:13
把这个啊给大家拿过来,咱们把这句话放到这里。然后这个图给大家也来画一下,比如现在啊,我这里边有一个类。好到这里。然后咱们要增强他的方法,那怎么做,咱要创建一个代理类,那代理类呢,就继承这个类最个继承关系,最终创建我们这个代理这个对象。这是啊,咱们看到的这么一个过程。这是我们那个目标。写一下啊,目标类。所以这个就是我们说的动态代理一个分类,给各位做一个说明,最后我再重复一遍啊,动态代理这个两个分类。
05:01
首先第一个动态代理分成两类,JDK的动态代理,还有z lib jdk指的就是有接口的情况,使用JDK动态代理,它就生成一个接口类的代理对象,也就说你的代理对象和目标对象都实现接口,如果说没有接口,用这些例,那他怎么做呢?通过继承被代理的目标类,最终生成代理对象。这是我们说的原理过程,所以大家把这分类给它记住,就是两种情况。然后这个之后我们继续来看啊,在我这张图里边有一个部分,大家看这里啊,这是咱说的两种情况,然后里边有一个叫AG,说一下这个是什么意思。给各位写到图里边,咱们继续来说,这个叫aspect。就是第二部分。或派的。那这是什么呢?强调啊,其实这个呢,本身它也一个框架,它是一个什么呢?你可以这么理解,它是一个a up的这么一个框架,就是本身呢,它不是使用一部分,但为什么这里面出现一个PAJ呢?给大家强调,因为J里边很多的方式特别的方便,它里面注解也特别强大,就是依赖于这个autopad j的注解实现A的功能,所以咱们用到了autopad j子瑞,用到里面的注解,最终可以很方便的实现a up中的各种功能。
06:34
其实这个J呢,本质上是一个静态代理,它用代理逻辑支入这个过程,所以它效果是一个动态的,但是本身是一个静态代理,只是借用里边的注解,最终实现了a up的功能,这是我们提到的什么叫autopa,所以咱们一会儿就基于这个autopa g来实现a up的境外功能。
07:00
这是咱们对于它的概念上的说明,各位记住两点,第一个动态代理分类,第二个什么是依赖于它的注解实现op的功能。这个我们说到这里,然后之后呢,我们继续来看啊,下面呢,咱们开始做这个具体的注解方式实验op,那怎么做呢?首先我们先做一些准备工作,然后咱们进行实现,那要做什么,咱们先做一个基本的分析,然后最终进行实现。我把这个分析过程在里边给大家来写一下,咱该怎么去做啊。首先第一步操作,咱们这个模块已经创建过了,我们一会儿还是用这个此文6A的模块把这个创建,然后创建之后呢,在里边引入a up相关的依赖,这依赖咱们之前的依赖不变,咱们需要再多引入两个依赖。大家看一下啊,这两个依赖,一个是A,一个是这个就是spring依赖于它这么一个依赖,所以咱需要把这个引入,这是我们的第一部分。
08:09
然后这部分完成之后呢,我们的第二部分做什么呢?我们来看啊,第二部分呢,我们就创建这个目标资源,就是咱们写个接口,然后写个事类最终的方法进行增强,这是我们的第二步。这里第二步创建我们的目标资源,咱们创建一个接口,包括里边的实现类,这个第二步操作,然后这个之后咱们继续来看啊,我们的第三步干什么呢?那咱们就创建一个叫切面类。小,这里第三步。创建切面类,然后切面类里边做什么呢?第一个我们就设置一下,这个叫切入点,就是咱们具体要对哪个方法进行增强,然后在里边我们还要设置你的通知的类型,比如我是在方法前进行执行,还是方法后执行,还是出现异常执行等等,这是我们的第三步。
09:11
然后大家看啊,我这课件中应该都写到了,第一步引入相关的依赖。然后第二部分咱建一个目标资源,包括接口,包括类,第三部分我们建个切面类,在里面做配置,包括我们配置这个叫切入点,就指定对哪个方法做增强,然后设置一下我们现在要做什么通知类型,你是前置还是后置,还是做什么事情,然后过程中还要用到损配置文件,最终那咱就完成测试。以上是一个基本的步骤说明,这个咱们先说到这里,然后下面呢,按照这个步骤,咱们开始用注解方式实现六。
我来说两句