日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

在ABAP里模拟实现Java Spring的依赖注入

發(fā)布時間:2023/12/19 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在ABAP里模拟实现Java Spring的依赖注入 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Dependency Injection- 依賴注入,在Java Spring框架中有著廣泛地應(yīng)用。通過依賴注入,我們不必在應(yīng)用代碼里繁瑣地初始化依賴的資源,非常方便。

那么ABAP能否從語言層面上也支持依賴注入,享受這種設(shè)計思路帶來的便利呢?讓我們做一次嘗試。

嘗試的場景

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

先看不使用依賴注入的常規(guī)實現(xiàn):

設(shè)計一個ABAP interface ZIF_SWITCHABLE,提供兩個方法,分別對應(yīng)開和關(guān)。

自然的,我有一個ABAP 類 ZCL_LAMP,用于實現(xiàn)上述接口。每個ZCL_LAMP的實例就是一盞燈。

CLASS ZCL_LAMP IMPLEMENTATION.method ZIF_SWITCHABLE~OFF.WRITE: / 'lamp off'.endmethod.method ZIF_SWITCHABLE~ON.WRITE: / 'lamp on'.endmethod.ENDCLASS.

再設(shè)計一個開關(guān)類,這個類有一個成員變量mo_switchable, 指向ZIF_SWITCHABLE這個接口。

開關(guān)有個“按”的方法。按下之后,如果當(dāng)前狀態(tài)是開,那么就調(diào)用mo_switchable成員的off方法,將其關(guān)閉,并設(shè)置開關(guān)狀態(tài)為關(guān)閉。反之亦然。

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.

我把迄今為止創(chuàng)建的兩個類:ZCL_LAMP和ZCL_SWITCH都放到package $ZDEV_INVERSION內(nèi)。

ABAP Summer框架的消費代碼

從下圖的代碼能看出,ZCL_SWITCH和ZCL_LAMP產(chǎn)生了強(qiáng)依賴關(guān)系。這種依賴關(guān)系是應(yīng)用開發(fā)人員調(diào)用set方法手動注入的。

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

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

line 9: 手工創(chuàng)建ZCL_SWITCH(開關(guān))的實例。

line 11: 調(diào)用set方法手動注入燈和開關(guān)的依賴關(guān)系。

使用ABAP Summer框架實現(xiàn)依賴注入

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

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

現(xiàn)在,怎樣用ABAP實現(xiàn)這些“魔術(shù)”?

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

注意:ABAP這門語言同Java不同,無法在語言層面支持注解,因此這里在Description字段上維護(hù)的@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常規(guī)實現(xiàn)和基于ABAP依賴注入思想的兩套消費代碼的比較,能清晰發(fā)現(xiàn),采取了ABAP依賴注入后,

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

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

line 9: 手工創(chuàng)建ZCL_SWITCH(開關(guān))的實例。

line 11: 調(diào)用set方法手動注入燈和開關(guān)的依賴關(guān)系。

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

ABAP Summer依賴注入的實現(xiàn)原理

這個ABAP依賴注入框架的實現(xiàn)在我的github上:

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

關(guān)于Java Spring依賴注入的講解,網(wǎng)上有很多寫得很精彩的著作。

下面是ABAP Summer依賴注入的核心實現(xiàn),參考了上圖著作關(guān)于Java Spring的講解。

要獲取更多Jerry的原創(chuàng)技術(shù)文章,請關(guān)注公眾號"汪子熙"或者掃描下面二維碼:

總結(jié)

以上是生活随笔為你收集整理的在ABAP里模拟实现Java Spring的依赖注入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。