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技術学習交換基、アリ・グレート神とあなたが話す技術