在远程调用服务提供者的实现之前,如果需要做一些参数验证、缓存、判断、小功能等等,满足要求再调用服务提供者的远程服务,则我们可以通过编写一个本地存根来实现这种功能。
(1)、在公共项目中或服务消费者项目中编写一个远程接口的本地存根实现。
1 1 package cn.coreqi.service.stub; 2 2 3 3 import cn.coreqi.entities.User; 4 4 import cn.coreqi.service.UserService; 5 5 6 6 import java.util.List; 7 7 8 8 public class UserServiceStub implements UserService { 9 9 private final UserService userService; //存储远程接口的代理实现 1010 1111 //必须有一个有参构造器,传入的是远程接口的代理实现 1212 public UserServiceStub(UserService userService) { 1313 //构造函数传入的是UserService的远程代理对象 1414 this.userService = userService; 1515 } 1616 1717 @Override 1818 public void addUser(User user) { 1919 try { 2020 //在此处进行缓存、参数验证等等 2121 //如果通过验证则调用远程代理实现的方法 2222 if(user != null) { 2323 userService.addUser(user); 2424 } 2525 } 2626 catch (Exception e){ 2727 //可以在此处进行容错等任何AOP拦截事项 2828 } 2929 } 3030 3131 @Override 3232 public void delById(Integer id) { 3333 try { 3434 //在此处进行缓存、参数验证等等 3535 //如果通过验证则调用远程代理实现的方法 3636 if(id != 0 || id != null){ 3737 userService.delById(id); 3838 } 3939 } 4040 catch (Exception e){ 4141 //可以在此处进行容错等任何AOP拦截事项 4242 } 4343 } 4444 4545 @Override 4646 public void modifyUser(User user) { 4747 try { 4848 //在此处进行缓存、参数验证等等 4949 //如果通过验证则调用远程代理实现的方法 5050 if(user != null){ 5151 userService.modifyUser(user); 5252 } 5353 } 5454 catch (Exception e){ 5555 //可以在此处进行容错等任何AOP拦截事项 5656 } 5757 } 5858 5959 @Override 6060 public User getById(Integer id) { 6161 try { 6262 //在此处进行缓存、参数验证等等 6363 //如果通过验证则调用远程代理实现的方法 6464 if(id != 0 || id != null){ 6565 return userService.getById(id); 6666 } 6767 } 6868 catch (Exception e){ 6969 //可以在此处进行容错等任何AOP拦截事项 7070 return null; 7171 } 7272 return null; 7373 } 7474 7575 @Override 7676 public List<User> getList() { 7777 try { 7878 //在此处进行缓存、参数验证等等 7979 //如果通过验证则调用远程代理实现的方法 8080 return userService.getList(); 8181 } 8282 catch (Exception e){ 8383 //可以在此处进行容错等任何AOP拦截事项 8484 return null; 8585 } 8686 } 8787 }
(2)、在服务消费者配置文件中配置本地存根
11 <!--3、声明需要调用的远程服务接口,生成远程服务代理,可以和本地Bean一样使用--> 22 <dubbo:reference id="userService" interface="cn.coreqi.service.UserService" stub="cn.coreqi.service.stub.UserServiceStub"/>