Une gestion d’erreur de son API .Net automatique via ses exceptions
...
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.
Source: https://docs.spring.io/spring-framework/reference/core/aop/proxying.html
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).
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
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.
Exemple:
JDK proxy:
Cglib proxy:
Sources:
https://www.springcloud.io/post/2022-01/springboot-aop/#gsc.tab=0
On va voir comment avoir en quelques minutes des assertions qui vont vérifier les endpoints de notre API avec des scénarios de ce genre: Feature: Create a new account As a visitor, I can create an account to access the game Scenario: A visitor c...
Depuis .NET 9, le le support d’OpenAPI est directement inclus dans .NET et ne passe plus par les librairies Swagger par défaut (plus d’info sur ce choix ici si jamais ça vous intéresse). De façons simplifiée, la librairie Swashbuckle.AspNetCore.Sw...
Description du problème Par défaut, il n’est pas autorisé de faire des requêtes entre une application qui est dans un domaine A vers une autre qui serait dans un domaine B (pour des raisons de sécurité, il y a plus de détails dans les sources). S...