Le contenu de cet article explique comment simuler et implémenter l'injection de dépendances Java Spring dans ABAP (images et textes). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. .
Injection de dépendances - L'injection de dépendances est largement utilisée dans le framework Java Spring. Grâce à l'injection de dépendances, nous n'avons pas besoin d'initialiser fastidieusement les ressources dépendantes dans le code de l'application, ce qui est très pratique.
ABAP peut-il également prendre en charge l'injection de dépendances au niveau du langage et profiter de la commodité apportée par cette idée de conception ? Essayons.
Une scène à essayer
Dans la vraie vie, chaque lumière a une commande d'interrupteur. Appuyez sur l'interrupteur et la lumière s'allume; appuyez à nouveau et la lumière s'éteint.
Ne regardons pas l'implémentation conventionnelle utilisant l'injection de dépendances :
Concevons une interface ABAP ZIF_SWITCHABLE, fournissant deux méthodes, correspondant respectivement à on et off.
Naturellement, j'ai une classe ABAP ZCL_LAMP qui implémente l'interface ci-dessus. Chaque instance de ZCL_LAMP est une lampe.
CLASS ZCL_LAMP IMPLEMENTATION. method ZIF_SWITCHABLE~OFF. WRITE: / 'lamp off'. endmethod. method ZIF_SWITCHABLE~ON. WRITE: / 'lamp on'. endmethod. ENDCLASS.
Concevez une classe switch. Cette classe a une variable membre mo_switchable, pointant vers l'interface ZIF_SWITCHABLE.
L'interrupteur dispose d'une méthode "appuyer". Après avoir appuyé sur, si l'état actuel est activé, appelez la méthode off du membre mo_switchable pour le désactiver et définissez l'état du commutateur sur off. vice versa.
METHOD push. IF isswitchon = abap_true. mo_switchable->off( ). isswitchon = abap_false. ELSE. mo_switchable->on( ). isswitchon = abap_true. ENDIF. ENDMETHOD.
Fournit une méthode de définition pour injecter la variable passée de type ZIF_SWITCHABLE dans la variable membre mo_switchable.
method SET_SWITCHABLE. mo_switchable = io_switchable. endmethod.
J'ai mis les deux classes que j'ai créées jusqu'à présent : ZCL_LAMP et ZCL_SWITCH dans le package $ZDEV_INVERSION.
Code de consommation du framework ABAP Summer
Comme le montre le code ci-dessous, ZCL_SWITCH et ZCL_LAMP crée une forte dépendance. Cette dépendance est injectée manuellement par le développeur de l'application en appelant la méthode set.
Pour résumer, certains aspects du code dans la figure ci-dessus peuvent être complètement évités dans Java Spring grâce à l'idée de dépendance injection.
ligne 8 : Créez manuellement une instance de ZCL_LAMP (light).
ligne 9 : Créez manuellement une instance de ZCL_SWITCH (switch).
ligne 11 : Appelez la méthode set pour injecter manuellement les dépendances des lumières et des interrupteurs.
Utilisation du framework ABAP Summer pour implémenter l'injection de dépendances
J'ai utilisé ABAP pour simuler le framework d'injection de dépendances Java Spring et développé un prototype nommé ABAP Summer, qui est compatible avec les échos Java Spring.
Réfléchissez d'abord à la façon d'implémenter cet exemple simple à l'aide de Java Spring. Un programmeur Java peut facilement écrire le code suivant. En utilisant l'annotation @Inject de Spring, nous n'avons pas besoin d'instancier manuellement ISwitchable et d'appeler la méthode set pour établir des dépendances. Tout est implémenté par le framework Spring pour nous.
Maintenant, comment utiliser l'ABAP pour réaliser cette « magie » ?
1. Ajoutez l'annotation @Inject dans le champ de description de la variable membre mo_switchable de la classe ZCL_SWITCH L'intention est de dire au framework ABAP Summer que j'espère que le membre mo_switchable pourra automatiquement être injecté avec un correct. dépendance. Quel type de dépendance est correct ? Comment le framework Summer sait-il injecter ? Veuillez continuer à lire.
Remarque : Le langage ABAP est différent de Java et ne peut pas prendre en charge les annotations au niveau du langage, donc le @Inject maintenu dans le champ Description ici est juste une simulation.
2. Examinons d'abord le code de consommation ABAP après avoir utilisé l'injection de dépendances. Est-ce que cela semble beaucoup plus propre tout d'un coup ?
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( ).
La figure suivante est une comparaison de deux ensembles de codes de consommation basés sur la mise en œuvre conventionnelle de l'ABAP et l'idée d'injection de dépendances ABAP. On peut clairement constater qu'après l'adoption de l'injection de dépendances ABAP,
Les trois opérations manuelles mentionnées précédemment sont complètement évitées. La variable membre mo_switchable dans l'instance switch renvoyée par la méthode GET_BEAN contient l'instance automatiquement injectée de la classe ZCL_LAMP. ligne 8 : Créez manuellement une instance de ZCL_LAMP (light).
ligne 9 : Créez manuellement une instance de ZCL_SWITCH (switch).
ligne 11 : Appelez la méthode set pour injecter manuellement les dépendances des lumières et des interrupteurs.
Regardons à nouveau le code de consommation authentique de Java Spring pour nous assurer que l'ABAP Summer que nous avons inventé est bien l'injection de dépendances d'origine.
Le principe de mise en œuvre de l'injection de dépendances ABAP Summer
La mise en œuvre de ce framework d'injection de dépendances ABAP est dans mon github :
https://github.com/i042416/je...
À propos de la dépendance de Java Spring Injection Expliquez qu'il existe de nombreux livres merveilleusement écrits sur Internet.
Ce qui suit est l'implémentation principale de l'injection de dépendances ABAP Summer, faisant référence à l'explication de Java Spring dans le livre ci-dessus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!