00:00
好,我们写完以后,我们来做测试啊,我们测完以后,你大约就能知道它灵活在哪,这是我要告诉你们的。好,那么在这个里面来啊,Test public void test jdk啊JDK吧。诶,你们我看到了。你们你们来告诉我,我现在应该创建谁的对象,就就还是老一套嘛,有这个这个这个这个我应该创建谁的对象。我是不是该创建proxy factory的对象,对吧,因为我要从这个对象里面拿我的agent,拿我的代理出来,人家是藏在这的,藏在这儿的,所以呢,这个地方哎。好,那么就是我们的proy proxy factory,然后factory,等于new proxy factory,这时候你会发现要传谁了,现在让谁进去,目标对象丢进去。
01:09
New superstar刘,先把刘德华弄进去,现在我的这个工厂里面已经拿到的是刘德华的目标对象,下面我是不是就可以得到那个代理对象,代理对象是他的类型是什么?Object呀,我们说了是不是生成代理对象,看这代理对象类型是不是object,返回动态代理对象object,没错,哎,Object,然后这A等于怎么着,Factory打点get agent是不是拿到了动态代理对象。这个就是动态代理对象啊,有的人说老师这不是也有这么一个类吗?它不是也在运行前存在了吗?先别着急啊,先用着来这个代理对象,我正常应该是代理对象打点调用S方法。我现在刘德华,我是不是就想去唱歌。
02:01
我是不是应该调用这个方法,可是这个object里面有没有算方法?没有,然而并没有,怎么办,怎么办?我当前的这个。方法我的接口里有没有。有,那我就把它直接转成接口嘛,我就强制转成接口,然后接口里面有新方法,我们看是不是刘德华在表演,而且预定时间,预定场地,结算费用都有。看看成不成?好,刘德华来了,然后代理的功能也在,妥妥的没毛病,能明白吗?那周润发放试试看呗,就不用试猜,用脚想也知道一定是OK的。是不?发哥这都来,是不是目标对象的切换依然灵活,这个不是重点。
03:01
不是重点,重点是。方法,你的口中的这个方法变了来接口中我增加一个方法,这个方法我们搞成这样,带返回值的string秀,然后带参数的,然后这int age,我们我我想表明的是连参数带返回值都有的,这样的方法我一样的能代理。我能我的那个代理对象,一行代码不用动,这个方法我就给你代理了,怎么搞来,我们先把实践写完啊,Superstar刘,然后我们在这实现未被实现的这个方法,然后呢,返回这是刘德华是吧,我们就返回一个刘。没毛病吧,然后呢,在这,哎,我们输出啊,就刘德华的,刘德华的秀。好就诶诶,我们再加上这个,再再加上一个A啊。就就这么着,可以吧,没毛病就做实现啊,然后superstar周也来一个。
04:06
然后呢,我返回周,哎,我我没有直接那样实际我就粘过来,因为更方便啊,然后呢,这这周周润发。周润发的秀加上年龄没毛病吧,参数也用了,反复值也有。然后我们来看我的这个动态代理工厂里面没有做任何的更改,我这个代码焊死在这儿。我只是来了更新的业务功能,更新的业务功能,这个功能能被代理。能被代理,看这怎么带这么带。那么在绕调用这个算方法,我再来一个。然后呢,JDK1。然后这这些都不变,这这些是不是也不变。这个变了,不要调用它了,我有返回值的呀,是吧?String,然后S等于A打点怎么着show。
05:03
我们现在是谁?周润发?周润发今年多大了?66。哎,反正就随便吧,反正你看我就是那种伪伪的那种,叫什么粉丝啊,都不知道我的偶像多大,永远18来吧,给个18算了,好,我们来输出啊,每次呢,我我都下去查,我都记住,但是下次讲课我又忘了。康长,我现在是不是就秀秀方法?我切换了方法,同学们,我只是在我自己的这个实践里面把方法实现了,然后呢,我的代理的这个地方一行没有改,什么方法来了都能被代理,这就是动态代理的好处。而且带参数带返回值都OK的,全部能搞得定的。能明白吗?来,换个刘德华。
06:02
刘德华,小一点吧,60吧,有这么大吗?你有多大?就60是吧,嗯。你还挺喜欢他的是吧,我都不知道看到那么哎,你看刘德华的秀,然后刘返回者你就发现了,我随便这个地方是不是切业务功能啊。能明白吗?啥功能来我这都能支持,这才是动态代理的核心点,再来看更重要的一点啊,更重要的一点,这个所有的JDK的动态代理。所有JDK的动态代理,哎,我们干这么一个事。好,这个时候,现在这个agent是我拿到的动态代理的对象,对不对,我就问你他是什么类型。
07:01
他是不声明的是这个类型,他正常是不是应该是service这个类型。哎,我们是我们看一看AJ的打点get class,这不就拿到它的类型吗?诶。我们看看。跟你想的不一样啊,同学们。他可不是什么service的类型。而是JDK动态代理的类型,是这个类型,你永远给我记住这个类型,你后面会见到无数次。我会N次,我就拿出这个类型让你看,如果你看到什么com proxy,打点proxy后面不管是二什么3452不管,但这个就是JDK动态代理对象的类型。能明白吗?能明白吗?同学吗?不明白就会记住啊,不明白就记住,然后我们再来看另外的一个输出啊,再看一个输出,那么比如说我的service。
08:00
Service啊,然后等于new,然后superstar。这个是不是接口指向实现类了。啊,然后呢,我们输出这个service,打点输出它的类型看看。我接口指向实践类,应该是实践类的类型还是接口的类型。哎,是实现类的类型,同学们接口指向实现类,你最终穿建的对象是实现类的类型啊,就你上的那个短袖长袖那个实线是你的类型。可是你会发现,我们如果用动态代理的这种方式创建的这个类型,它却是proxy的这种类型,跟接口,跟实现类没有一丝丝的关系,就是因为在这个中间我们是做手脚了,这个中间我干了这么多的活,这个中间干了这么多的活,这已经被改变了,这已经被追加功能上去,被增强功能实现了。他已经不是原先的他了,不是。能懂吗?
09:01
啊,多了这些功能啊,同学们,你拿到的这个对象就多了什么,这个都是多的功能啊。都是动态补充上去的功能。啊,这个就是我们JDK动态代理的一个测试啊。
我来说两句