Quelle est la différence entre le proxy dynamique JDK et cglib?

de la documentation du ressort:

Spring AOP Utilisez le Proxies dynamiques JDK ou CGLIB pour créer le proxy pour un objet cible donné. (Les proxy dynamiques JDK sont préférés chaque fois que vous avez une option).

Si l’objet cible à mettre en œuvre par proxy implémente au moins une interface, un proxy JDK dynamique sera utilisé. Toutes les interfaces implémentées par le type de destination seront proxy. Si l’objet cible n’implique pas d’interface, une proxy de cglib sera créée.

Si vous souhaitez forcer l’utilisation de la proxy de cglib (par exemple, d’appliquer le proxy à chaque méthode définie pour l’objet cible. , non seulement à ceux mis en œuvre par leurs interfaces), vous pouvez le faire. Cependant, certains sujets à considérer:

Les méthodes finales ne peuvent pas être conseillées, car elles ne peuvent pas être annulées.

aura besoin de binaires de CGLIB 2 sur leur parcours de classe, tandis que cette dynamique Les procurations sont disponibles avec JDK. Spring vous informera automatiquement lorsque vous avez besoin de CGLIB et les classes de bibliothèque de CGLIB ne sont pas dans la classe de classe.

Le constructeur de votre objet proxy sera appelé deux fois. Il s’agit d’une conséquence naturelle du modèle de proxy de cglib par lequel une sous-classe est générée pour chaque objet proxy. Pour chaque instance de proxy, deux objets sont créés: l’objet proxy réel et une instance de la sous-classe qui implémente le Conseil. Ce comportement n’est pas affiché lorsque les proxies JDK sont utilisés. Habituellement, appelez le fabricant du type de proxy deux fois, n’est pas un problème, car généralement les affectations ne sont fabriquées que et qu’aucune logique réelle n’est mise en œuvre dans le constructeur.

Leave a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *