Les différences de fonctionnalités
Le JDK procurations permettent de mettre en œuvre tout un ensemble d'interfaces tout en sous-classement Object
. Toute la méthode de l'interface, en plus d'Object::hashCode
, Object::equals
et Object::toString
est ensuite transmis à un InvocationHandler
.
cglib vous permet de mettre en œuvre tout un ensemble d'interfaces tout en sous-classement non-classe finale. Aussi, les méthodes peut être remplacé en option, c'est à dire pas tous les non-méthodes abstraites doivent être intercepté. En outre, il existe différentes façons de mettre en œuvre une méthode. Il propose également une InvocationHandler
(de la classe dans un package différent), mais il permet aussi d'appeler super méthodes en utilisant les plus avancés intercepteurs comme par exemple un MethodInterceptor
. En outre, cglib peut améliorer les performances par des interceptions comme FixedValue
. Une fois, j'ai écrit un résumé de différents intercepteurs pour cglib.
Les différences de rendement
JDK procurations sont mis en œuvre plutôt naïvement qu'avec une seule interception répartiteur, l' MethodInterceptor
. Cela nécessite une méthode virtuelle envoi d'une mise en œuvre qui ne peut pas toujours être insérée. Cglib permet de créer des octets de code ce qui peut parfois améliorer les performances. Voici quelques comparaisons pour la mise en œuvre d'une interface avec 18 stub méthodes:
cglib JDK proxy
creation 804.000 (1.899) 973.650 (1.624)
invocation 0.002 (0.000) 0.005 (0.000)
Le temps est indiqué en nanosecondes avec un écart type entre accolades. Vous pouvez trouver plus de détails sur l'indice de référence en Octets Copain tutoriel, où Byte Buddy est un plus moderne alternative à cglib. Notez également que cglib n'est plus en développement.