00:00
下面我们继续来学习a op,刚才呢,我们说了AOP的基本概念,然后下面给各位说一下AOP它的底层的原理。咱们来讲一下底层的。原理我这里写一下a op呢,它叫做面向切面编程,比如咱们刚才讲到的,在不通过修改源代码的方式,在你的主干功能中可以加一个新的功能,我们刚才举的是登录例子,而这个过程它是怎么实现的呢?在a op中有一个底层原理,就是它的底层,我写一下。A up的底层使用到了这么一个东西,它叫做动态代理,它是用动态代理方式增强类中的某个方法的功能,比如你这里边的登录加一个全判断这过程,它是用动态代理方式做一个实现这个啊是它一原理,然后下面给大家具体讲一下它这个动态代理方式是怎么来增强这种的方法,或者怎么来增加一个新的功能。
01:07
那我们写到这个位置,首先我强调在这个动态代理中有这么两种情况。就是有两种。情况的动态代理。那两种情况给大家写一下,首先第一种情况就是有接口的情况。因为我们现在是要在一个主干功能中增加一个新的功能加入,现在这里边有个方法做登录,那我们在登录方法中要加个判断,这里边第一种情况是有接口,然后里边还有第二种情况,它叫做没有接口的情况,所以主要是两种情况,然后两种情况中我先把这个名词写一下,然后咱一会儿画图去解释。第一种情况,在有接口的时候,我们想增强一个类中的方法,那这个时候要使用到一种动态代理,它就是JDK中的这个动态代理。
02:06
如果说你没有接受情况,那我们要使用一种动态代理,它叫CD live的这个动态代理,这是它的两种情况,然后两种情况分别什么意思,给大家下面去解释一下,你注意啊,这里边都提一个词叫代理。什么叫代理呢?就是现在我们用这种方式创建,你要被增强对象一个代理对象,然后通过代理对象把这功能做到,那我下面给大家画个图来说一下两种情况,先说第一种情况,有接口情况,说一下这动态代理我们该怎么去做。然后写一下啊,就是动态代理。第一种情况有接口情况,那这个怎么做,给各位来具体写一下,比如我现在这里边有一个interface这么一个接口。
03:01
就直接来一个啊interface。假如说这个接口名字,比如我叫这个U。Du啊,这是一个interface这么一个接口,然后在Du里边,比如现在我有一个方法power we,假如这个方法我就叫一个,呃,就叫一个烙印这么一个方法。这是一个interface,一个接口,然后各位知道有接口咱就要有什么,是不是有它的实现类啊,假如下面有实现类,我们叫user。Do PL,让它实现我们这个接口。然后这接口叫u Du。在里边我们肯定要实现它那个具体的方法,然后它的方法就是我们刚才写这个public we,我们叫这个login。在方法中,假如现在我这方法是个登录,大家肯定要写我们登录的这么一个实验过程。
04:04
登录的实验过程,所以这个啊是一个最基本的一个结构,就是现在这种情况叫有这种情况,而我现在想做个效果,想要在登录基础之上再加一个相应的判断,或者加一些其他的内容,这就叫增强一个内容的方法,而这个过程怎么做,按照a op的方式。咱是不是要通过。不修改源代码,把这个功能增加,那怎么做呢?咱就要用到我们里边的这个东西叫JDK的动态代理。我小的位置。JDK的动态代理的实现,这是它的底层原理,而JDK动态代理怎么做的,给各位来说一下啊,大家看我现在这里边是不是有一个interface接口,然后这位置是不是有一个实现内容,而我现在目的想要把这实验类中这个捞印方法的功能做个增加或者做个增强,那这首怎么做,按照JDK动态代理的方式怎么做,在这过程中呢?首先你在这个过程中需要再创建一个这个接口的实验类。
05:13
但这实验内咱并不是像这种方式扭出来的,创建什么我写一下,它就是第一部分创建下这个user Du这个接口,一个实现类对象的一个什么,它叫一个代理的一个对象,什么叫代理对象?我强调说的通俗点,这个对象跟这个u Du PL不一样,因为它是new出来对象,而咱这对象不是new出来的,但是和你这个u Du这个实验类的一个对象能做成相同功能,就跟它是等价的,咱需要建一个代理对象。就是你这个。U Du这个接口的代理对象,然后咱们通过代理对象来增强这个类中的方法就是把捞印通过代理对象,然后里边有它之前的功能,然后再加一些新的功能,这个就是有接口情况,各位把这句话记住,我再重复一遍啊。有接口怎么做?创建你接口实验类的代理对象,然后咱们通过代理对象来增强这种方法就让你的登录里边加一些新的功能,这就是有接口情况。
06:26
各位把这给他知道啊,这是一个原理上的东西,希望各位自己多花点时间把这原理给他好好去理解理解。这个啊,我们做了一个说明。创建接口,实现类的代理对象,然后增强,最终的方法我写一下啊。接口实现类的代理对象,然后去增强类里边那个方法,这个啊是我们说的第一种情况,给各位做了一个说明,然后这个动态代理除了第一种情况之外,还有第二种情况,就是你没有接口的时候,它也能作为增强,那我给各位再来说一下第二种情况,这是第一种啊,咱写到这里啊,这里边我画一条横线来,下面给大家写它的第二种情况,就是没有接口情况。
07:16
我小的位置。动态。代理。没有接口情况,那这个怎么做,给各位来说一下啊,我把这个往下画一点,比如现在我这里边呢,有一个类,这类我写一下,比如叫class啊,假如类的名字我就叫。User,然后在user里边,比如现在我有一个方法public weight,假如方法我叫aid啊,这么一个方法,然后在A中,比如有它对应的一些相关的一些逻辑,这是一个基本的类和方法,然后我现在比如说想做功能,我想要让这个A的中的方法的功能做个增加,就是增强user类中的A的方法,那这个怎么做呢?
08:04
各位想一下可以怎么做,如果说咱们用最原始方式,有一种很简单的做法,咱们创建user类的一个子类是不是可以的,就是我这么写,我来一个class加这个类,我就叫这个person,让它继承我们这个user这个类。然后继承之后,咱可以重写里边这个public way的这个A的方法,然后在里边呢,咱可以调用它父类中的方法,就来一个super。点A的在里边,咱可以写它那个就是一些增强的一些逻辑,这是我们原始方式,就你创建当前类的一个子类,然后通过子类来增强语文的方法。这不知道各位是不是能看懂啊,都属于我们Java,应该都是基础部分的东西,咱建个此类做到,但是现在这么做并不是我们要做的效果,但要通过动态代理做的,而动态代理怎么做,我写一下啊,这里边要用的是我们说那个叫cg lib的动态代理。
09:11
而这个动态里怎么做呢?代里边它也是要创建一个代理对象,那创建什么,就创建你当前这个类,它的子类的一个代理对象,比如说我们现在啊,再建个类,让这个类也是user类的一个子类,但是它是一个代理对象,比如现在这位置啊,咱建一个。代理对象,这个对象也是他的一个子类,但也是它不是new出来的,但是和你new出来这个person类能做出相关功能,咱通过一个代理对象就把类中的方法做个增强,这个就是CD,利用方式创建你类的此类的代理对象,然后把这个就增强,跟接口不一样,接口是实现类带对象,你没有接口是子类的代理对象,然后完成这么一个增强。
10:05
所以这个啊是他的第二种情况,就是关于这个没有接口情况,我把这个给各位截过来,然后在里边写一下。这个做法就是创建你的子类的一个代理对象,然后去增强类里边的方法。所以咱们现在就把这个原理上的东西给各位做了一个说明,我最后再总结一遍啊,这个过程a up,咱说的就是你在不改变源代码的情况下,去增强你里边的这个方法的功能,或者增加主中的功能。咱们举了登录例子,然后它的底层原理主要用到了动态代理方式,动态代理两种情况,一种是有接口,一种是没有接口,有接口的话,创建接口实现类的代理对象,用它来增强,没有接口创建你的子类的代对象,用它来增强。所以这是关于咱说的a op的。
11:03
底层原理。他用的就是动态代理方式,把这个过程给他最终做到,所以大家把这个概念性的东西给他好好去理解理解,所以这个啊我们就完成了,然后这个都完成之后呢,咱们下面给各位可以写一下,这个就是关于JDK动态代理,放上这个代码,咱通过代码把这过程我们再感受一下,但是我强调啊,咱们因为现在学的是SPRING5框架,在此文五里边,他把这个动态代理的代码已经帮我们做了封装,我们只需要用最简单方式进行配置可以了。当然这个原理性的东西要各位对他要有个认识,包括你知道它是什么,咱们马上来写一段动态代理这个底层代码,让各位感受一下这个特点,然后后面咱重点就是基于死人框架,把这个用更方便的方式进行实现,所以现在咱主要讲的是它的底层的原理部分。
我来说两句