国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

mengera88 / 3426人閱讀

摘要:依賴注入,在框架中有著廣泛地應用。這種依賴關系是應用開發人員調用方法手動注入的??偨Y一下,上圖代碼有哪些是在里完全能夠通過依賴注入的思想來避免的。讓我們再看看里正宗的消費代碼,確保我們發明的確實是原汁原味的依賴注入。

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

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

嘗試的場景

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

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

設計一個ABAP interface 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.

再設計一個開關類,這個類有一個成員變量mo_switchable, 指向ZIF_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.

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

method SET_SWITCHABLE.

mo_switchable = io_switchable.

endmethod.

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

ABAP Summer框架的消費代碼

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

總結一下,上圖代碼有哪些是在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實現這些“魔術”?

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

注意: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依賴注入后,

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

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

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

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

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

ABAP Summer依賴注入的實現原理

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

https://github.com/i042416/je...

關于Java Spring依賴注入的講解,網上有很多寫得很精彩的著作。

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

要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71786.html

相關文章

  • ABAP vs Java, 蛙泳 vs 自由泳

    摘要:去年月定下的一年之內學會自由泳的目標終于實現了,特來還愿。和蛙泳和自由泳?;蛟S有的朋友覺得這兩組概念風馬牛不相及,然而在眼中,之于相當于蛙泳之于自由泳。像前面介紹過的和擁有五花八門的工具一樣,蛙泳和自由泳也有著眾多變式。 去年7月定下的一年之內學會自由泳的目標終于實現了,特來還愿。 ABAP和Java,?蛙泳和自由泳。前面的組合是Jerry用來掙錢養家的技術,后者是Jerry花了大量業...

    taoszu 評論0 收藏0
  • Java反射-動態代理

    摘要:動態代理有多種不同的用途,例如,數據庫連接和事務管理用于單元測試的動態模擬對象其他類似的方法攔截。調用序列和下面的流程類似單元測試動態對象模擬利用動態代理實現單元測試的動態存根代理和代理。框架把包裝成動態代理。 使用反射可以在運行時動態實現接口。這可以使用類java.lang.reflect.Proxy。這個類的名稱是我將這些動態接口實現稱之為動態代理的原因。動態代理有多種不同的用途,...

    Acceml 評論0 收藏0
  • 慕課網_《使用Google Guice實現依賴注入》學習總結

    摘要:時間年月日星期六說明本文部分內容均來自慕課網。慕課網教學源碼學習源碼第一章課程介紹課程簡介是啥讀音是輕量級的依賴注入框架說明一個的框架需要有基礎什么是剝離注入輕量級代碼少易維護性能優異,跟比較。 時間:2017年10月14日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com 教學源碼:https://github.com/zccodere/s......

    2450184176 評論0 收藏0
  • Spring之旅 - 3.0、3.1、4.0導引

    摘要:之旅簡化開發的使命簡化開發為了降低開發的復雜性,采取如下關鍵策略基于的輕量級和最小侵入性編程通過依賴注入和面向接口實現松耦合基于切面和慣例進行聲明式編程通過切面和模版減少樣式代碼依賴注入耦合性具有兩面性一方面,緊密耦合的代碼難以測試難以復 Spring之旅 簡化Java開發 Spring的使命:簡化Java開發 為了降低Java開發的復雜性,采取如下關鍵策略:基于POJO的輕量級和最...

    leon 評論0 收藏0
  • SAP S4CRM和C4C技術比較

    摘要:在以下簡稱和以下簡稱開發團隊都工作過,這篇文章給出這兩款產品一些技術層面的比較。標準開發方式和的雖然看起來都是風格,但實現技術不同。而的標準則是基于和協作而成的。 如果您對SAP S/4HANA for Customer Management(以下簡稱S4CRM)和SAP Cloud for Customer(以下簡稱C4C)不甚熟悉,那我建議您可以先瀏覽我之前寫的這兩篇微信公眾號文章...

    xi4oh4o 評論0 收藏0

發表評論

0條評論

mengera88

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<