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

資訊專欄INFORMATION COLUMN

在ABAP里模擬實現(xiàn)Java Spring的依賴注入

mengera88 / 3431人閱讀

摘要:依賴注入,在框架中有著廣泛地應(yīng)用。這種依賴關(guān)系是應(yīng)用開發(fā)人員調(diào)用方法手動注入的。總結(jié)一下,上圖代碼有哪些是在里完全能夠通過依賴注入的思想來避免的。讓我們再看看里正宗的消費代碼,確保我們發(fā)明的確實是原汁原味的依賴注入。

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的實例就是一盞燈。

</>復(fù)制代碼

  1. CLASS ZCL_LAMP IMPLEMENTATION.
  2. method ZIF_SWITCHABLE~OFF.
  3. WRITE: / "lamp off".
  4. endmethod.
  5. method ZIF_SWITCHABLE~ON.
  6. WRITE: / "lamp on".
  7. endmethod.
  8. ENDCLASS.

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

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

</>復(fù)制代碼

  1. METHOD push.
  2. IF isswitchon = abap_true.
  3. mo_switchable->off( ).
  4. isswitchon = abap_false.
  5. ELSE.
  6. mo_switchable->on( ).
  7. isswitchon = abap_true.
  8. ENDIF.
  9. ENDMETHOD.

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

</>復(fù)制代碼

  1. method SET_SWITCHABLE.
  2. mo_switchable = io_switchable.
  3. endmethod.

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

ABAP Summer框架的消費代碼

從下圖的代碼能看出,ZCL_SWITCH和ZCL_LAMP產(chǎn)生了強依賴關(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成員能夠自動被注入一個正確的依賴進來。到底什么樣的依賴算正確?Summer框架如何知道該怎樣注入?請繼續(xù)閱讀。

注意:ABAP這門語言同Java不同,無法在語言層面支持注解,因此這里在Description字段上維護的@Inject只是一個模擬。

2. 先看采用了依賴注入之后的ABAP消費代碼,是不是一下子清爽了很多?

</>復(fù)制代碼

  1. data(summer) = zcl_summer=>get_instance( ).
  2. data(lo_switch) = cast zcl_switch( summer->get_bean( EXPORTING iv_bean_name = "ZCL_SWITCH" ) ).
  3. lo_switch->push( ).
  4. 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/je...

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

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

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71786.html

相關(guān)文章

  • ABAP vs Java, 蛙泳 vs 自由泳

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

    taoszu 評論0 收藏0
  • Java反射-動態(tài)代理

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

    Acceml 評論0 收藏0
  • 慕課網(wǎng)_《使用Google Guice實現(xiàn)依賴注入》學(xué)習(xí)總結(jié)

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

    2450184176 評論0 收藏0
  • Spring之旅 - 3.0、3.1、4.0導(dǎo)引

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

    leon 評論0 收藏0
  • SAP S4CRM和C4C技術(shù)比較

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

    xi4oh4o 評論0 收藏0

發(fā)表評論

0條評論

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