真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ABAP模擬JavaSpring依賴(lài)注入的方法-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)ABAP模擬Java Spring依賴(lài)注入的方法  ,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)專(zhuān)注于香洲企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開(kāi)發(fā),商城系統(tǒng)網(wǎng)站開(kāi)發(fā)。香洲網(wǎng)站建設(shè)公司,為香洲等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

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

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

嘗試的場(chǎng)景

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

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

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

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

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

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

開(kāi)關(guān)有個(gè)“按”的方法。按下之后,如果當(dāng)前狀態(tài)是開(kāi),那么就調(diào)用mo_switchable成員的off方法,將其關(guān)閉,并設(shè)置開(kāi)關(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.

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

method SET_SWITCHABLE.

mo_switchable = io_switchable.

endmethod.

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

ABAP Summer框架的消費(fèi)代碼

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

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

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

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

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

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

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

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

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

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

注意:ABAP這門(mén)語(yǔ)言同Java不同,無(wú)法在語(yǔ)言層面支持注解,因此這里在Description字段上維護(hù)的@Inject只是一個(gè)模擬。

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

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( ).

下圖是基于A(yíng)BAP常規(guī)實(shí)現(xiàn)和基于A(yíng)BAP依賴(lài)注入思想的兩套消費(fèi)代碼的比較,能清晰發(fā)現(xiàn),采取了ABAP依賴(lài)注入后,

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

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

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

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

讓我們?cè)倏纯碕ava Spring里正宗的消費(fèi)代碼,確保我們發(fā)明的ABAP Summer確實(shí)是原汁原味的依賴(lài)注入。

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

這個(gè)ABAP依賴(lài)注入框架的實(shí)現(xiàn)在我的github上:

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

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

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

關(guān)于A(yíng)BAP模擬Java Spring依賴(lài)注入的方法  就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。


當(dāng)前題目:ABAP模擬JavaSpring依賴(lài)注入的方法-創(chuàng)新互聯(lián)
文章位置:http://weahome.cn/article/jspjd.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部