千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关在ABAP里如何模拟实现Java Spring的依赖注入,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。尝试的场景在现实生活中,每一盏灯都
千家信息网最后更新 2026年11月03日在ABAP里如何模拟实现Java Spring的依赖注入

这篇文章将为大家详细讲解有关在ABAP里如何模拟实现Java Spring的依赖注入,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

尝试的场景

在现实生活中,每一盏灯都有一个开关控制。按下开关,灯被打开;再按一次,灯熄灭。

先看不使用依赖注入的常规实现:

设计一个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/jerryslide/tree/master/ABAP/summer

关于"在ABAP里如何模拟实现Java Spring的依赖注入"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

方法 实例 代码 框架 成员 变量 手动 手工 消费 注解 篇文章 下图 两个 字段 就是 常规 思想 接口 更多 状态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中关村互联网科技集团 互联网巨头反垄断金融科技 科技信息互联网 苏州互联网科技贷款公司 顺玮阁互联网科技 互联网科技公司名称 互联网科技公司做什么 海南购全球互联网科技 互联网科技公司招聘 济南和联互联网科技有限公司 济南华为互联网科技产业总部基地 北京华百购互联网科技有限公司 互联网经济与金融科技 武汉健翔互联网络科技有限公司 威龙国际互联网科技公司 滨湖区互联网智能科技产品有哪些 伍佰万互联网科技怎么赚钱 广州梦谷互联网科技有限公司领导 福建互联网展示科技馆设计 互联网领先科技活动 上海喔噻互联网科技有限公司 天津市摩尔互联网科技 广州百单互联网科技有限公司 厦门中拓互联网络科技有限公司 深圳科技互联网 宜安科技 互联网金融 互联网科技英文翻译 科技赋能互联网健康 中国互联网有什么科技含量 互联网金融中的现代科技
0