00:00
好,接下来呢,我们再来说上一个配置叫本地存更,本地存更是用来做什么呢?来我们来回想一下我们的服务的消费者consumer要调用服务提供者provider的功能,他们呢是远程调用,而功能的实现呢,都在provider这一段,我们这个consumer里边相当于只有我们这个远程的接口,那每次要调用呢,我们都是连向远程的provider来调用我们这些实现,但是呢,我们往往说有时候我们想要在调用真正实现之前,可能要做一些比如参数验证,或者来做一些缓存,那我们就可以来编写一个本地存根,然后我们这个远程引用的接口在我的这个服务消费者本地呢,也有一个相当于本地代码,这个本地存根代码呢,我们在调用之前,比如做一些判断啊,或者做一些小功能,如果满足我们需要的要求,我在呢。
01:00
去来利用这个远程代理对象调远程服务,如果不满足我就可以不用调用了,那这个东西怎么做呢?我们只需要呢,在我们消费方啊,我们服务消费者里边来写一个我们远程接口的本地的一个存根实现,但是呢,必须有一个有参构造器,这个有参构造器传入的是我们远程接口的代理实现,这个呢,我们不用传,这是人家默认自己就大报传进来的。然后呢,我们就可以在这判断,当我们判断执行通过以后,我们再来调用这段代码,这段代码呢,相当于是调远程服务真正的功能,好,我来做一个实验,我们呢这个order service的实现,我们想要调user service,哎,我们在这呢是来调user service的,但是呢,我在本地呢,先来写一个user service的实现,User service。
02:00
那我们就叫本地存根,叫本地存根呢,我们来实现user service接口。好,这个user service接口呢,我们实现了以后,这有这么一个方法,而且呢,我们一定要private,我们也写一个final,我们来注入这个user service。然后呢,使用有参构造器的方式,哎,我们只用一个有参构造器,这样呢,Double就会自动来创建这个本地存根对象,它会传入我们user service的远程代理对象,传入的是user service远程的代理对象。哎,这样呢,我们可以在本地存根里边要获取用户地址列表呢,我就可以来判断一下,如果说当我们传的这个不是空创的时候,我们可以用一个string u,哎,我们spring中有这么一个工具is empty来判断一下,如果你传的这个user ID不是空串,我再给你远程调用远程字么调呢,那就是我们这个user service我们保存过来了,这是我们远程的代理对象,我们再来调远程的方法把这个userz ID传进去,如然后呢,把这个return过来,否则的话呢,那我就给你return成一个空的,哎,这样呢,我们可以有一个本地存正的实现,可以先在之前做一些小验证,那这个写好以后呢,怎么配置,我们需要配置在这儿。
03:40
好,那怎么配置呢?来写在这儿,来配置本地存根。本地存根的配置呢,我们结合文档,你只需要用一个double service标签,当然这个double service呢,它是在服务提供者里边配的,那我们现在是我把本地存根写在了消费者里边,消费者要远程调用之前,先来调用本地存根的代码,那我们就应该在这配,消费者是reference,同样呢,它会有一个属性叫啊sub,这个sub呢,来指定我们本地存根的这个全类名就行了,你把这个代码拿来。
04:24
全利名复制来,好,我CTRLV,那我们就来看一下我们运行期间本地存的这个代码会不会被调用呢?来,如果它被调用,我就在这输出一句话,哎,用这个叫user service sum。本地存根呢就被调用了,来测试一下,我来运行慢方法走。找来运行慢方法。哎,我们发现呢,本地存根确实是被调用了,哎调用以后呢,才接下来调用远程的服务,因为判断通过了,所以说呢,我们这个本地存根就是这么来用,但是呢,我们说这个本地存根啊,实际在开发中,它应该是放在我们这个接口跟前,那这个接口呢,远程的实现在另外一个工程里边,但是呢,我们调用远程实现之前,可以先把本地的存根代码放进来。
我来说两句