在遠程調用服務提供者的實現之前,如果需要做一些參數驗證、緩存、判斷、小功能等等,滿足要求再調用服務提供者的遠程服務,則我們可以通過編寫一個本地存根來實現這種功能。
(1)、在公共項目中或服務消費者項目中編寫一個遠程接口的本地存根實現。
1 package cn.coreqi.service.stub; 2 3 import cn.coreqi.entities.User; 4 import cn.coreqi.service.UserService; 5 6 import java.util.List; 7 8 public class UserServiceStub implements UserService { 9 private final UserService userService; //存儲遠程接口的代理實現 10 11 //必須有一個有參構造器,傳入的是遠程接口的代理實現 12 public UserServiceStub(UserService userService) { 13 //構造函數傳入的是UserService的遠程代理對象 14 this.userService = userService; 15 } 16 17 @Override 18 public void addUser(User user) { 19 try { 20 //在此處進行緩存、參數驗證等等 21 //如果通過驗證則調用遠程代理實現的方法 22 if(user != null) { 23 userService.addUser(user); 24 } 25 } 26 catch (Exception e){ 27 //可以在此處進行容錯等任何AOP攔截事項 28 } 29 } 30 31 @Override 32 public void delById(Integer id) { 33 try { 34 //在此處進行緩存、參數驗證等等 35 //如果通過驗證則調用遠程代理實現的方法 36 if(id != 0 || id != null){ 37 userService.delById(id); 38 } 39 } 40 catch (Exception e){ 41 //可以在此處進行容錯等任何AOP攔截事項 42 } 43 } 44 45 @Override 46 public void modifyUser(User user) { 47 try { 48 //在此處進行緩存、參數驗證等等 49 //如果通過驗證則調用遠程代理實現的方法 50 if(user != null){ 51 userService.modifyUser(user); 52 } 53 } 54 catch (Exception e){ 55 //可以在此處進行容錯等任何AOP攔截事項 56 } 57 } 58 59 @Override 60 public User getById(Integer id) { 61 try { 62 //在此處進行緩存、參數驗證等等 63 //如果通過驗證則調用遠程代理實現的方法 64 if(id != 0 || id != null){ 65 return userService.getById(id); 66 } 67 } 68 catch (Exception e){ 69 //可以在此處進行容錯等任何AOP攔截事項 70 return null; 71 } 72 return null; 73 } 74 75 @Override 76 public List<User> getList() { 77 try { 78 //在此處進行緩存、參數驗證等等 79 //如果通過驗證則調用遠程代理實現的方法 80 return userService.getList(); 81 } 82 catch (Exception e){ 83 //可以在此處進行容錯等任何AOP攔截事項 84 return null; 85 } 86 } 87 }
(2)、在服務消費者配置文件中配置本地存根
1 <!--3、聲明需要調用的遠程服務接口,生成遠程服務代理,可以和本地Bean一樣使用--> 2 <dubbo:reference id="userService" interface="cn.coreqi.service.UserService" stub="cn.coreqi.service.stub.UserServiceStub"/>