この記事の内容は、ABAP で Java Spring の依存関係インジェクションをシミュレートおよび実装する方法に関するものです (写真とテキスト)。必要な方は参考にしていただければ幸いです。 。
依存性注入 - 依存性注入は、Java Spring フレームワークで広く使用されています。依存関係の注入により、アプリケーション コード内で依存リソースを面倒に初期化する必要がなくなり、非常に便利になります。
それでは、ABAP は言語レベルからの依存性注入もサポートし、この設計アイデアによってもたらされる利便性を享受できるのでしょうか?やるだけやってみよう。
シーンを試してみる
実際には、すべてのライトにスイッチ コントロールがあります。スイッチを押すとライトが点灯し、もう一度押すとライトが消えます。
依存性注入を使用した従来の実装は見ていません。
オンとオフにそれぞれ対応する 2 つのメソッドを提供する ABAP インターフェイス ZIF_SWITCHABLE を設計します。
当然のことながら、上記のインターフェイスを実装する ABAP クラス ZCL_LAMP があります。 ZCL_LAMP の各インスタンスはランプです。
CLASS ZCL_LAMP IMPLEMENTATION. method ZIF_SWITCHABLE~OFF. WRITE: / 'lamp off'. endmethod. method ZIF_SWITCHABLE~ON. WRITE: / 'lamp on'. endmethod. ENDCLASS.
スイッチ クラスを設計します。このクラスには、ZIF_SWITCHABLE インターフェイスを指すメンバー変数 mo_switchable があります。
#スイッチは「押す」方式です。押した後、現在の状態がオンの場合は、mo_switchable メンバーの off メソッドを呼び出してオフにし、スイッチの状態をオフに設定します。逆に。
METHOD push. IF isswitchon = abap_true. mo_switchable->off( ). isswitchon = abap_false. ELSE. mo_switchable->on( ). isswitchon = abap_true. ENDIF. ENDMETHOD.渡された ZIF_SWITCHABLE 型の変数をメンバー変数 mo_switchable に注入するセッター メソッドを提供します。
method SET_SWITCHABLE. mo_switchable = io_switchable. endmethod.これまでに作成した 2 つのクラス、ZCL_LAMP と ZCL_SWITCH をパッケージ $ZDEV_INVERSION に入れました。
ABAP Summer フレームワークの使用コード
以下のコードからわかるように、ZCL_SWITCH ZCL_LAMP は強力な依存関係を作成します。この依存関係は、アプリケーション開発者が set メソッドを呼び出して手動で挿入します。要約すると、上図のコードのうち、Java Spring では依存性注入の考え方によって完全に回避できるのはどれですか。 8 行目: ZCL_LAMP (ライト) のインスタンスを手動で作成します。 行 9: ZCL_SWITCH (スイッチ) のインスタンスを手動で作成します。 行 11: set メソッドを呼び出して、ライトとスイッチの依存関係を手動で挿入します。
ABAP Summer フレームワークを使用した依存関係注入の実装
ABAP を使用して Java Spring 依存関係注入フレームワークをシミュレートし、互換性のある ABAP Summer という名前のプロトタイプを開発しました。 Java Springエコーを使用します。 まず、この簡単な例を Java Spring で実装する方法を考えてください。 Java プログラマは、Spring の @Inject アノテーションを使用すると、依存関係を確立するために ISwitchable を手動でインスタンス化し、set メソッドを呼び出す必要がなく、次のコードを簡単に作成できます。すべては Spring フレームワークによって実装されます。さて、ABAP を使用してこれらの「魔法」を実現するにはどうすればよいでしょうか? 1. ZCL_SWITCH クラスのメンバー変数 mo_switchable の説明フィールドに注釈 @Inject を追加します。これは、mo_switchable メンバーに正しい値が自動的に挿入されることを ABAP Summer フレームワークに伝えることです。依存。どのような依存関係が正しいのでしょうか? Summer フレームワークはどのようにして注入方法を知るのでしょうか?ぜひ読んでください。
注: ABAP 言語は Java とは異なり、言語レベルでアノテーションをサポートできないため、ここで [説明] フィールドで維持される @Inject は次のようになります。たった一つのシミュレーション。 2. まず、依存関係の挿入を使用した後の ABAP 消費コードを見てみましょう。突然、非常にきれいになったように感じますか?
data(summer) = zcl_summer=>get_instance( ). data(lo_switch) = cast zcl_switch( summer->get_bean( EXPORTING iv_bean_name = 'ZCL_SWITCH' ) ). lo_switch->push( ). lo_switch->push( ).次の図は、ABAP の従来の実装と ABAP 依存性注入のアイデアに基づいた 2 つの消費コードの比較です。ABAP 依存性注入が採用された後は、# であることが明確にわかります。
##前述の 3 つの手動操作は完全に回避されます。 GET_BEAN メソッドによって返されるスイッチ インスタンスのメンバー変数 mo_switchable には、自動的に挿入された ZCL_LAMP クラスのインスタンスが含まれています。
8 行目: ZCL_LAMP (ライト) のインスタンスを手動で作成します。
行 9: ZCL_SWITCH (スイッチ) のインスタンスを手動で作成します。
行 11: set メソッドを呼び出して、ライトとスイッチの依存関係を手動で挿入します。
Java Spring の本物の消費コードをもう一度見て、私たちが発明した ABAP Summer が確かに元の依存関係注入であることを確認しましょう。
#ABAP Summer 依存関係注入の実装原則
この ABAP 依存関係注入フレームワークの実装は次のとおりです。私の On github: https://github.com/i042416/je...Java Spring の依存関係について注射 インターネット上には素晴らしい本がたくさんあります。
以下は、ABAP Summer の依存関係注入のコア実装です。上記の本の Java Spring の説明を参照してください。
以上がABAP で Java Spring 依存関係注入をシミュレートして実装する方法 (画像とテキスト)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。