Using proxy-target-class="true" with Spring beans Using proxy-target-class="true" with Spring beans spring spring

Using proxy-target-class="true" with Spring beans


By setting proxy-target-class="true" you will be using CGLIB2 for your proxies, instead of jdk proxys.

The implications are the following, as described in the documentation:

  • final methods cannot be advised, as they cannot be overriden.

  • You will need the CGLIB 2 binaries on your classpath, whereas dynamic proxies are available with the JDK. Spring will automatically warn you when it needs CGLIB and the CGLIB library classes are not found on the classpath.

  • The constructor of your proxied object will be called twice. This is a natural consequence of the CGLIB proxy model whereby a subclass is generated for each proxied object. For each proxied instance, two objects are created: the actual proxied object and an instance of the subclass that implements the advice. This behavior is not exhibited when using JDK proxies. Usually, calling the constructor of the proxied type twice, is not an issue, as there are usually only assignments taking place and no real logic is implemented in the constructor.

Also, you should be able to make a "target-proxy" for a specific component by using

proxyMode=ScopedProxyMode.TARGET_CLASS


Forcing a CGLib-Proxy although the controller formally implements an interface (SpringBoot 1.2.3.RELEASE with Spring 4.1.6.RELEASE):

@Controller@Scope( proxyMode = ScopedProxyMode.TARGET_CLASS )public class ServiceImpl implements ServiceIntf{ .... }

This enables valid and working @RequestMapping and @Transactional annotations


Use the following annotation in Java Spring Config class:

@EnableAspectJAutoProxy(proxyTargetClass = true)