From Spring documentation:
primavera AOP utiliza cualquiera de proxies dinámicos JDK o CGLIB para crear el proxy para un objeto de destino dado. (Los proxies dinámicos JDK son preferidos siempre que tenga una opción).
Si el objeto de destino a ser procesado implementa al menos una interfaz, entonces se usará un proxy dinámico JDK. Todas las interfaces implementadas por el tipo de objetivo serán procesadas. Si el objeto objetivo no implementa ninguna interfaz, se creará un proxy CGLIB.
Si desea forzar el uso del proxying CGLIB (por ejemplo, para proxy de cada método definido para el objeto de destino, no solo aquellos implementados por sus interfaces) puede hacerlo. Sin embargo, hay algunos problemas que se deben tener en cuenta:
No se pueden recomendar los métodos finales, ya que no se pueden anular.
Necesitará los binarios de CGLIB 2 en su classpath, mientras que los proxies dinámicos están disponibles con el JDK. Spring le advertirá automáticamente cuando necesite CGLIB y las clases de biblioteca CGLIB no se encontrarán en la ruta de clase.
El constructor de su objeto con proxy se llamará dos veces. Esta es una consecuencia natural del modelo de proxy CGLIB mediante el cual se genera una subclase para cada objeto con proxy. Para cada instancia de proxy, se crean dos objetos: el objeto proxy real y una instancia de la subclase que implementa el consejo. Este comportamiento no se muestra cuando se utilizan proxys JDK. Por lo general, llamar al constructor del tipo de proxy dos veces no es un problema, ya que normalmente solo se llevan a cabo asignaciones y no se implementa una lógica real en el constructor.
Obtén el código aquí:. En cglib puede crear proxy de clase y proxy de interfaz. Spring usa CGlib por defecto mientras AspectJ usa Java proxy. Lea esto también: http://jnb.ociweb.com/jnb/jnbNov2005.html;) –