Dans une application Spring, sauf exceptions, les Beans sont proxifiés. En d’autres mots, on n’interagit pas directement avec eux et ce mécanisme est à la base de l’AOP.
Beaucoup de mécanismes s’appuient sur l’AOP (les Transactions par exemple) et connaître la façon dont sont proxifiés les beans est important pour prédire et comprendre certains comportements.
La documentation Spring est très claire sur la question:
If the target object to be proxied implements at least one interface, a JDK dynamic proxy is used. All of the interfaces implemented by the target type are proxied. If the target object does not implement any interfaces, a CGLIB proxy is created.
Quand, dans mon application Spring Boot j’avais mon Bean proxifié par CGLIB alors qu’il implémentait une interface, j’ai donc cru à une erreur mais que nenni !
Dans une application Spring Boot, depuis Spring Boot 2, c’est CGLIB qui est utilisé en priorité, même quand un Bean implémente une interface ! Attention donc si vous annotez @Transactionnal sur une méthode final (vous n’aurez pas d’erreur mais la transaction ne s’effectuera pas).
Avoir le même comportement qu’une application Spring classique
Si vous souhaitez avoir les mêmes règles que dans une application Spring classique, dans votre application.properties, ajoutez la ligne suivante:
spring.aop.proxy-target-class=false
Astuces
Vous pouvez utiliser
AopUtils.isCglibProxy(monBean);
Ou
AopUtils.isJdkDynamicProxy(monBean);
Pour savoir quel proxy est utilisé.
Vous pouvez bien évidemment utiliser le débugger pour vous en rendre compte également.
Votre changelog reprend les fonctionnalités que vous avez réalisé entre deux versions, ça tombe bien, votre historique git contient ces informations :) On va voir comment les extraire de git pour générer automatiquement un changelog exhaustif et fiable.
Le principe
Pour faciliter la maintenance de votre projet, il est d’usage d’avoir des commits parlants afin que tous les d...
Photo by Yancy Min on Unsplash
Contexte
Je suis développeur au quotidien et j'aime développer en dehors du travail également.
Parfois, il peut m’arriver de faire un kata entre midi et deux par exemple. J'aime bien du coup garder une trace de mon exerc...
On va prendre un cas concret: j’ai fait un commit et en relisant ma merge request, je me rend compte que certains fichiers ne devraient pas y être:
Dans mon cas c’est le fichier src/test/java/com/globaldashboard/unit/dependencies/domain/PomUrlTest.java
...
Prérequis
Il faut que vous ayez déjà installé un JDK. Exécutez la commande:
java --version
Si vous avez bien un output de ce type avec cette commande, vous pouvez continuer.
Dans le cas contraire, il faudra installer un JDK.
...