00:00
在这里呢,TLA它的要求就是能继承就可以了,这提到一句话说对于无接口的类要创代理呢,要求七接代,为什么这么说呢?是因为我们主要讲的JDK的动态代理,它要求你的目标类必须有接口。没接口用不了啊,JDK动态代理这个接口必须有,必须有没接口是不行的,所以才说如果说你没接口的话。它用不了,你只能用这种方式啊,下面呢,我们着重呢,来说这个JDK的动态代理方式,该如何呢去实现它。在讲这个JDK的动态链之前呢,我们先把这个反射机制呢,稍微的复习一下。我不知道大家呀,对反射长到什么程度啊,这里呢,我们要稍微复习一下反射,我们来说重点的JDK动态代理,强调之前呢,先来看一看反射啊,反射在这里我们主要看一下这个method它的一个。
01:25
Method都知道,它应该表示是方法啊,表示方法,方法也就是类中的方法,通过这个method可以执行某个方法,现在呢,给家用一下这个method类啊,它是我们在写这个动态代理的时候呢。关键性的一个类在这儿的method给他呢介绍一下method啊,就是复习一下,因为大家之前呢都讲过我们的反射吗?这儿大家复习一下啊,我看看怎么做比较合适。
02:11
那我们就在我们当前的零一啊零一我们不改它,我们自己新建一个小模块吧。新建一个啊。啊,新建一个model。普通的Java项目,然后耐克的,那我们这个叫做零二,我们叫做测试呢,Method。然后finish OK就行了。哦,这是零二啊,名字我改一下吧。Shift加F6。啊,我的名字呢,也叫做C02 C02统一这样的命名规则就行了啊啊。那现在呢,在程序中我准备这么做,我呢创建一个创建一个类啊。
03:05
这个类呢,我们放在这个包里边,我叫做hello service。它呢是一个接口。在接口中我们来定义一个方法,VO,我叫做c hello,参数呢是一个字符串,目的是说呢,哎,跟某人打招呼,跟。啊,跟这个name呢打招呼。啊,打招呼,这是hello service创建它的实现类,实现类。啊,我们像这个包呢。发明叫inel,它下面的类呢,我们叫做hello service in好,我们让它呢去实现刚刚那个接口,也就是hello service ctrl加O,实现我们的方法c hello。
04:08
在这里我们来说一句话啊,我们说你好,你好呢,是name啊,是他。那现在呢?我要想能够执行这个方法c hello,那我们可以这么做。我们去创建一个测试类啊test的APP。创建一个主方法map。在这里呢,我们来创建一个hello service对象new一个hello service之后service呢,调用c hello参数呢,我们说是张三,那此时执行主方法。得到的是你好,张三。看结果说你好,张三,很简单,我们现在这种方式呢,是直接通过对象调用方法传递参数来完成a hello方法的执行,这种方式是我们最常用的,那现在呢,我想让你通过反射机制。
05:16
来执行C哈的方法,通过反射来执行它,通过反射来执行它啊。那我现在把上面这个代码呢,先给它注释一下。下面我们要做的是说使用反射机制,我们要执行C哈方法,怎么通过反射我能执行某个方法呢?那这里核心呢,就是我们的method类。啊,核心就是这个method。它代表的是类中的方法。它代表类中的方法的这个method,它能够去执行方法,那怎么做呢?我看看啊,首先呢,我们来创建我们的这个对象啊,叫做target new hello。
06:18
Service实现类对象。下面呢,我们要做的是呢,是获取say hello这个名称。这个名称对应的MY类对象,那我们来看看这么用啊,Hello service.get.class反射获取类,然后点还有个叫做get。Method获取这个类中的方法,我用第一个哪一个方法呢?叫做C哈的方法。
07:03
这个发没有参数啊,你得声明一下,这个方法的参数是string类型的,那我来指定string.class。那这是get method,我们看看这个方法返回是什么?是method,是你传入的这个名称所对应的method的对象,嗯,Method的对象。第二个参数呢,它指的是这个方法的参数是什么。参数是什么?那我们现在这个参数是一个字符串嘛,所以我指定的是string加class,它的操作会有异常,抛出抛出去。那现在我们的返回值是一个method呀method,那现在我们的这个它就能代表这个C哈方法了。我现在来执行这个method。
08:03
下面我们通过这个method可以执行我们的c hello方法调用,怎么做呢?Method类它是有个方法叫。叫invo,大家肯定听过啊,叫VO,这个VO呢,它有俩参数。第一个参数呢,是说你要执行哪个对象的方法。对象。第二是说方法在执行时的参数。这个invo啊,它的参数有两个invoke。呢是method的类中的一个方法,一个方法啊,一个方法它来表示执行方法的调用啊,方法的调用,这个方的参数呢有两个,第一个参数叫做object。
09:15
啊,第一个参数啊,你看一眼啊,第一个参数,第一个参数是不是OBBJ呀object吧。这个才是object,它在表示对象的,对象的我们是说要。啊,我们要执行这个对象的。Method的方法啊,这么说有点住绕口这块啊,焦表对象,那我们要干什么呢?我们要用这个对象的方法,这么说,所以个直接一点的啊,要用这个对象的方法,然后第二个参数是什么呢?第二个参数是一个opposite a这个拿过来。
10:01
是一个object a这个什么呢?这个是方法执行时的参数值,也就是我们在刚才执行这个C号是纯张三嘛。那我们这个是一个可变参数,它代表就是一个张三的这个值啊。那我们来看这个math work。它有没有返回值呢?有看到这儿吧,有个object吧返回值。它还有个返回值,这个返回值呢,是一个object,它表示的是方法执行。零后的那个返回值什么意思,也就是说我们这个C哈的方法在其行时候,我们现在它反正是不是一个Y呀,指的就是这个就这部分啊反映什么结果呢?就是它啊指的返回值。
11:00
那这个method invoke,我想要用。这个方法调用来执行我们c hello。首先说第一个参数要指行哪个对象呢?我们在乘序中,这就是他给呀,我准备执行这个对象中对应的这个c hello。把它给它拿进来,放到这儿。第二个就是我们say hello方法,在平行时不需要有个参数跟某个人打招呼吗?那这个跟谁打招呼呢?跟李四,跟李四,那这个方案有反馈值没有,只不过目前是what而已啊,你看。就itt好了,它执行过程中也会抛异常抛出去好。那现在我只要把代码一执行,我们就能够去执行这个C哈了,这句话所表达含义就是啊。
12:02
我们现在的这个method in所表达的意思是。所表达的。的意思就是我们要执行他给他对象的。C哈,然后参数呢是例四。这块为什么说C哈呢?是因为我们这个method它现在所表达的是这个C哈方法,所以这个method代表是C哈这个方法啊。那我们在Java中在执行方法时,这个方法必定得关联着一个对象嘛,所以这提供的是对象。我们要执行这个对象的。它所表达的方法,因为它的C哈嘛,所以就是说要执行它给的C哈方法,所哈方法有参数,我们这传理四。
13:08
那我们看一下能不能输出,你好,李四呢,来执行一下。看结果啊,是你好李四吧,那说明呢,我们现在。通过我们这个method类,它的Mo调用是能够执行这个say hello方法吧,那如果这个target的你换了对象了,比方说这个target我们再来一个hello service啊,那我们这个叫做SERVICE2吧,那这块比如说你用一个新的对象,我们再来一个吧。再来一个啊,这不有一个实现类吗?我们再来一个hello service2。然后在这二里边呢,我们呢,加点内容随便加点就行了啊,这样呢有一个变化啊。
14:03
那现在呢,我想执行的是hello service2这个对象里边的c hello,那我们就用一个hello service2对象。把这个对象呢传进来,那现在我们执行的时候,就是刚刚实现的二里边的那个C爬楼了。看结果,我们看这是不是你好,李四,那现在通过我们这个method的inbg,你就会发现你传入哪一个对象,我就执行哪个对象呢。方法这个method它现在代表的是c hello方法你传入哪个对象,我就执行这个对象c hello。这是反射机制,我们现在呢,这个method,它是一个独立的方法对象。代表就方法,哪个方法写hello,我在上面的声明的呀。
15:04
这是我声明的,对吧。我声明的是一个找到这个接口中的C哈方法,那么这个麦就代表这个C哈了。我通过引方法我就能执行。任意对象的c hello,方法了,好,这是method invo,我们要执行方法。这就是反射机遇的一个应用。用method的,它代表的是某一个方法,我现在代表的是say hello,那我就可以通过method Mo来调用执行c hello方法,这就是反射机制。第一个是对象,第二个是C哈楼方法在执行时的参数。好,这是反射机制的一个应用。
我来说两句