In the beginning, the use of the CGLIB library was introduced in Spring 1.1 because JDK 1.3 proxies weren't really efficient. With versions 1.4 and following, they have been improved. However, even with JDK 1.5, CGLIB proxies are still three times faster.
Despite all this, we have to notice that JDK proxies need an interface to do their job, and only the methods declared in the interface can be used by the proxy. But this is not always possible, particularly when the code we deal with is written by others.
In this case, it's better to use CGLIB proxies that don't require the presence of interfaces to implement. CGLIB proxies generate the bytecode for the new class on the fly for each proxy, reusing in those cases that were already created. This allows some optimizations.
But we have to be clear that to use CGLIB proxies, we need to have the CGLIB JAR. Whereas with JDK, any JAR is required. Moreover, if we deal with final methods, we cannot do the override, and so we can apply...