Dubbo汎化参照
2083 ワード
汎用化呼び出し、ビジネスインタフェースクラスによるリモート呼び出しを必要とせず、プラットフォームのテスト、オープンゲートウェイブリッジなど(本番環境で使用可能)
説明:汎化引用は主にサービス消費者に対して、サービス提供者は正常にサービスを暴露すればよく、いかなる修正をする必要はない.
用途:汎用インタフェース呼び出し方式は主にクライアントがAPIインタフェースとモデルクラスを持たない場合に用いられ、パラメータと戻り値のすべてのPOJOはMapで表され、通常フレームワーク統合に用いられる.例えば、汎用的なサービステストフレームワークを実現し、GenericService呼び出しによってサービスを実現することができる.
メリット:modelとapiを露出する必要はありません.サービス消費者は、呼び出しのインタフェース名、メソッド名、パラメータ、パラメータタイプなどを知るだけで、リモート呼び出しを実現できます.
単純なDemo:
(1)API(汎化引用の場合、消費者に露出しない):
(2)サービスプロバイダ(インタフェース実装):
(3)サービス消費者側に配置:
(4)呼び出し(SpringMvcベース):
基本タイプおよびDate,List,Mapなどは変換を必要とせず,直接呼び出す.
POJOパラメータなら
これにより、クライアントにAPIインタフェースおよびモデルクラス要素がない場合に、サービスをリモートで呼び出すことができる.
説明:汎化引用は主にサービス消費者に対して、サービス提供者は正常にサービスを暴露すればよく、いかなる修正をする必要はない.
用途:汎用インタフェース呼び出し方式は主にクライアントが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インタフェースおよびモデルクラス要素がない場合に、サービスをリモートで呼び出すことができる.