マイクロチャネル公共プラットフォームにおける反射の応用

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/zhupanlinch/article/details/102693887

1、開発の背景

ときマイクロチャネル公共数の開発は、我々は、マイクロチャネルメッセージを解決するために行くだろうし、別のメッセージの種類に応じて、対応する操作を行います。以下は、マイクロチャネルのメッセージボディの部分です。

< XML > 

< ToUserName > <![CDATA [TOUSER]]> </ ToUserName>

< FromUserName > <![CDATA [FROMUSER]]> </ FromUserName>

< CREATETIME > 1348831860 </ CREATETIME>

< のMsgType > <![CDATA 【のMsgType]]> </のMsgType>

< のMsgId > 1234567890123456 </のMsgId>

</ XML>

ここでのMsgTypeは8種類、すなわち、テキスト、イベントです。非常に多くのメッセージタイプは、どのようにそれを行うには?...他に、切り替える?取り扱うことができれば、それはあまりにも簡単ですようです。

 

そこで質問が来て、イベントニュースイベント。、離陸場所をアップロードし、カスタムメニュー、ニュースを懸念しています。メッセージ本文を参照してください。

< XML > 

< ToUserName > <![CDATA [TOUSER]]> </ ToUserName>

< FromUserName > <![CDATA [FROMUSER]]> </ FromUserName>

< CREATETIME > 123456789 </ CREATETIME>

< のMsgType > <![CDATA [イベント]]> </のMsgType>

< イベント > <![CDATA [購読]]> </イベント>

</ XML>は、

イベントメッセージは、イベントの種類、特定のイベント(別のボタンをクリックしてください)イベントに対応して、カスタムメニュー、Nがあることをイベントが植えられています。あなたが分岐構造を記述するために使用されている場合、それは少し恥ずかしいです。だから、概念の導入後、この恥ずかしいを解決するために - リフレクション。

 

図2に示すように、反射

それは何を反映していますか?この概念といえば、著者は彼の顔無意味な力を表明しました。私は以下のいくつかの例を見て、覚えていません。

2.1 オブジェクトを介して完全なパッケージとクラス名を取得

公共の静的な無効メイン(文字列[]引数){ 
デモデモ= 新しいデモ()
   システム。アウト .println(。demo.getClass()のgetName());
}


2.2クラスのクラスオブジェクトがインスタンス化

<?>クラスDEMO1 = NULL; 
DEMO1 = Class.forNameの("com.example.bean.Demo" )

 

注意:baidu.comフォーラムの検索には多くの例があります。

 

あなたは私の2つの単純な例も上書きコピー、バイドゥのビットを見つけます。しかし、それでもまだ、私はで反射されたものを集計します:


いずれかのオブジェクトのランタイム・クラスに属し分析するステップと、実行時にオブジェクトのコンストラクタ任意のクラス、任意のクラスは、実行時に持つメンバ変数とメソッドを分析するステップと、実行時に指定されたオブジェクトのメソッドを呼び出し、動的プロキシを生成します。

 

説明の上にこの段落を読んだ後、それは問題ではない、無知な外観の力ではありませんし、その後、参照例からの反射の役割を理解します。


3、公共プラットフォームの使用の反射マイクロチャネル

/ ** 
*マイクロチャネルイベント    
* /
パブリックインターフェイス
WechatEventCenter {

/ **     * @関数の説明:マイクロチャネル戻りデフォルト     * / パブリック BaseWechatMsg DefaultEvent(); / **     * @関数の説明:テキストメッセージ     * / パブリック BaseWechatMsgのテキスト(); / **     * @関数の説明:位置メッセージ     * / パブリック BaseWechatMsg 位置(); / **     * @機能の説明:音声メッセージ     * / パブリック BaseWechatMsg


   

   


   

   


   

   


   ();
/ **     * @関数の説明:<P> イベント・メッセージ</ P> * / 公共 BaseWechatMsg イベント(); / **     * @関数の説明:<P> ノー問題とき、プッシュのための関心のイベントの後</ p型> * @return * / 公共 BaseWechatMsg 購読(); / **     * @関数の説明:ボタン1、対応するボタンのeventKeyは、メソッド名を作成する     *ので、ここでメソッド名は、Javaを押さない、ああ、少し奇妙に見えるのです仕様を命名、     *あなたも自分の好みに定義することができます     * / 公共 BaseWechatMsg EVENT_HOMEを(); }
   

   
   

   

   
   
   

   




   

 

/ ** 
*マイクロチャネル・アクセス・エントリ
** /
@RequestMapping(値= 「インデックス」
@ResponseBody
パブリック文字列微信(HttpServletRequestのリクエスト HttpServletResponseの応答
文字列の署名文字列のタイムスタンプ文字ノンス文字列echostr){
文字列結果= 「」;文字列メソッドrequest.getMethod =();    IF"GET" .equals(方法)){ //アクセス認証リターン echostr ; //が成功したアクセスが復号検証ここでは省略するechostr直接返す } {
   

       
   //メッセージ処理の結果=のdoPost(要求); } 戻り結果; }
       
   

 

アクセスが成功した後、およびコードに直接フォローアップに焦点を当てます:

プライベート文字列のdoPost(HttpServletRequestのリクエスト){ 

BaseWechatMsg wechatMsg   試す { 文字列sReqData = WechatUtils.convertStreamToString(request.getInputStream()) DocumentBuilderFactory DBF = DocumentBuilderFactory.newInstance() DocumentBuilderのDB = dbf.newDocumentBuilder() StringReader SR = 新しいにStringReader(sReqData) InputSourceのは=で新しいのInputSource(SR); 文書の文書= db.parse(です)素子ルート= document.getDocumentElement()


     
     
     
     
     
     
     Root.getElementsByTagNameのfromusername =文字列(HqWechatConstant.FromUserName).Item(0).getTextContent();システム。OUT .println("ユーザ:" + fromusername + "微信を入力してください。";システム。OUT .println(「ユーザへのメッセージ:\ R&LT \ N- " + sReqData);文字列MSGTYPE = root.getElementsByTagName(HqWechatConstant.MsgType).Item(0).getTextContent(); wechatEventCenter.setRoot(根); //パラメータ噴射         //イベントタイプが行うことには、Getメソッドメソッド、メソッドwechatEventCenter.getClass =()getMethod(MSGTYPE);         //メソッド名反射メソッドを呼び出します
     
     
     
     

     

     = wechatMsg(BaseWechatMsg)Method.invoke(wechatEventCenter); } キャッチ(例外E){ //デフォルトメソッド呼び出し wechatMsg =(BaseWechatMsg)wechatEventCenter.defaultEventを(); e.printStackTrace(); } 最後に、{ } システム。OUT .println (「メッセージを返信することである:\ R&LT \ N- ' + wechatMsg);   戻り wechatMsg.toString(); }
 

       
       
 




反射にここで使用されるプロセスは、それは、コードの次の2行です。

メソッドメソッド = wechatEventCenter.getClass()getMethod(MSGTYPE) 

wechatMsg =(BaseWechatMsg)メソッド .invoke(wechatEventCenter)

全体のプロセスは、イベントメッセージに対処する上で、完全であるように、ここに入らない、OKでのeventKeyイベントに応じて対応するメソッドを呼び出すことと同じです。

 

4、要約

いずれかのオブジェクトのランタイム・クラスに属し分析するステップと、実行時にオブジェクトのコンストラクタ任意のクラス、任意のクラスは、実行時に持つメンバ変数とメソッドを分析するステップと、実行時に指定されたオブジェクトのメソッドを呼び出し、動的プロキシを生成します。

  

参考のためにのみ、不備も、私を許してください、私を修正してください!


福祉、終了懸念Javaの組合返信舞台裏を

返信[ ビデオ]:100G +無料の学習動画
応答[ 本は実際にあるより]:1000冊の+本は無料プログラミングのebookの
返信[ プラスグループ]:Java技術学習交換基、アリ・グレート神とあなたが話す技術

640?wx_fmt = PNG

おすすめ

転載: blog.csdn.net/zhupanlinch/article/details/102693887