中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在ABAP里如何模擬實現Java Spring的依賴注入

發布時間:2021-11-20 15:52:40 來源:億速云 閱讀:143 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關在ABAP里如何模擬實現Java Spring的依賴注入,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

嘗試的場景

在現實生活中,每一盞燈都有一個開關控制。按下開關,燈被打開;再按一次,燈熄滅。

先看不使用依賴注入的常規實現:

設計一個ABAP interface ZIF_SWITCHABLE,提供兩個方法,分別對應開和關。

在ABAP里如何模擬實現Java Spring的依賴注入

自然的,我有一個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.

再設計一個開關類,這個類有一個成員變量mo_switchable, 指向ZIF_SWITCHABLE這個接口。

在ABAP里如何模擬實現Java Spring的依賴注入

開關有個“按”的方法。按下之后,如果當前狀態是開,那么就調用mo_switchable成員的off方法,將其關閉,并設置開關狀態為關閉。反之亦然。

METHOD push.IF isswitchon = abap_true.
mo_switchable->off( ).
isswitchon = abap_false.ELSE.
mo_switchable->on( ).
isswitchon = abap_true.ENDIF.
ENDMETHOD.

提供一個setter方法,將傳入的類型為ZIF_SWITCHABLE的變量注入到成員變量mo_switchable中。

method SET_SWITCHABLE.
mo_switchable = io_switchable.
endmethod.

我把迄今為止創建的兩個類:ZCL_LAMP和ZCL_SWITCH都放到package $ZDEV_INVERSION內。

在ABAP里如何模擬實現Java Spring的依賴注入

ABAP Summer框架的消費代碼

從下圖的代碼能看出,ZCL_SWITCH和ZCL_LAMP產生了強依賴關系。這種依賴關系是應用開發人員調用set方法手動注入的。

在ABAP里如何模擬實現Java Spring的依賴注入

總結一下,上圖代碼有哪些是在Java Spring里完全能夠通過依賴注入的思想來避免的。

line 8: 手工創建ZCL_LAMP(燈)的實例。

line 9: 手工創建ZCL_SWITCH(開關)的實例。

line 11: 調用set方法手動注入燈和開關的依賴關系。

使用ABAP Summer框架實現依賴注入

我自己用ABAP模擬了Java Spring的依賴注入框架,開發了一個原型,取名ABAP Summer,與Java的Spring相呼應。

先想想這個簡單的例子用Java Spring如何實現。一個Java程序員很容易就能寫出下面的代碼,利用Spring的注解@Inject,我們無需手動實例化ISwitchable和調用set方法建立依賴。一切由Spring框架幫我們實現了。

在ABAP里如何模擬實現Java Spring的依賴注入

現在,怎樣用ABAP實現這些“魔術”?

1. 在ZCL_SWITCH類的成員變量mo_switchable的描述字段里加上注解@Inject,意圖是告訴ABAP Summer框架,我希望mo_switchable成員能夠自動被注入一個正確的依賴進來。到底什么樣的依賴算正確?Summer框架如何知道該怎樣注入?請繼續閱讀。

在ABAP里如何模擬實現Java Spring的依賴注入

注意:ABAP這門語言同Java不同,無法在語言層面支持注解,因此這里在Description字段上維護的@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依賴注入思想的兩套消費代碼的比較,能清晰發現,采取了ABAP依賴注入后,

在ABAP里如何模擬實現Java Spring的依賴注入

之前提到的這三處手動操作完全得到避免。GET_BEAN方法返回的開關實例,里面的成員變量mo_switchable包含的就是自動注入好的ZCL_LAMP類的實例。

line 8: 手工創建ZCL_LAMP(燈)的實例。

line 9: 手工創建ZCL_SWITCH(開關)的實例。

line 11: 調用set方法手動注入燈和開關的依賴關系。

讓我們再看看Java Spring里正宗的消費代碼,確保我們發明的ABAP Summer確實是原汁原味的依賴注入。

在ABAP里如何模擬實現Java Spring的依賴注入

ABAP Summer依賴注入的實現原理

這個ABAP依賴注入框架的實現在我的github上:

https://github.com/i042416/jerryslide/tree/master/ABAP/summer

在ABAP里如何模擬實現Java Spring的依賴注入

關于“在ABAP里如何模擬實現Java Spring的依賴注入”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

田阳县| 高尔夫| 叙永县| 鄂尔多斯市| 宁夏| 兴海县| 邵阳市| 武隆县| 梓潼县| 兰州市| 海林市| 南京市| 桓台县| 宾阳县| 壶关县| 嘉峪关市| 绵竹市| 青田县| 孟连| 汝阳县| 湾仔区| 汤阴县| 横山县| 铁岭市| 丹棱县| 乐都县| 平陆县| 定南县| 洪江市| 银川市| 托克逊县| 西平县| 福泉市| 乡城县| 西盟| 玛沁县| 格尔木市| 丹棱县| 泸定县| 琼海市| 十堰市|