Dubbo汎化参照

2083 ワード

汎用化呼び出し、ビジネスインタフェースクラスによるリモート呼び出しを必要とせず、プラットフォームのテスト、オープンゲートウェイブリッジなど(本番環境で使用可能)
 
説明:汎化引用は主にサービス消費者に対して、サービス提供者は正常にサービスを暴露すればよく、いかなる修正をする必要はない.
用途:汎用インタフェース呼び出し方式は主にクライアントがAPIインタフェースとモデルクラスを持たない場合に用いられ、パラメータと戻り値のすべてのPOJOはMapで表され、通常フレームワーク統合に用いられる.例えば、汎用的なサービステストフレームワークを実現し、GenericService呼び出しによってサービスを実現することができる.
 
メリット:modelとapiを露出する必要はありません.サービス消費者は、呼び出しのインタフェース名、メソッド名、パラメータ、パラメータタイプなどを知るだけで、リモート呼び出しを実現できます.
 
単純なDemo:
 
(1)API(汎化引用の場合、消費者に露出しない):
 
public interface IMenusService {
	public String test(String id);
}

 
 
 
(2)サービスプロバイダ(インタフェース実装):
 
public class IndexMenusServiceImpl implements IMenusService {
	@Override
	public String test(String id) {
		return id + "  ";
	}
}

 
 
 
 (3)サービス消費者側に配置:
 
 


 
 
 
(4)呼び出し(SpringMvcベース):
基本タイプおよびDate,List,Mapなどは変換を必要とせず,直接呼び出す.
 
@Controller
@RequestMapping("generic")
public class GenericAction {
	@Resource
	private GenericService genericService;
	
	@ResponseBody
	@RequestMapping("getGeneric")
	public String Generic(){
//       Date,List,Map      ,    
Object result = genericService.$invoke("test", new String[] { "java.lang.String" }, new Object[] { "2" });//     POJO     Map 
return result.toString();
	}
}

 
POJOパラメータなら
 
//  Map  POJO  ,      POJO      Map 
Map menus = new HashMap();
menus.put("menuSeq", "222");
menus.put("menuName", "    ");
//     POJO     Map 
Object result = genericService.$invoke("getMenusModel", new String[] { "com.sic777.modules.menus.model.Menus" }, new Object[] { menus });

 
 
これにより、クライアントにAPIインタフェースおよびモデルクラス要素がない場合に、サービスをリモートで呼び出すことができる.