title: After spring upgrade: could not generate CGLIB subclass of class class com.sun.proxy.$Proxy
body: <p>My application was recently upgraded from Spring 3.x to Spring 4.x (via moving our app to Spring-boot, latest version)</p>
  
  <p>We have some AOP in place that look like this and worked fine prior to this upgrade: (cglib was being used to create the proxies)</p>
  
  <pre><code>&lt;bean id="myproxycreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&gt;
      &lt;property name="proxyTargetClass" value="true"/&gt;
      &lt;property name="interceptorNames"&gt;
          &lt;list&gt;
              &lt;value&gt;myInterceptor&lt;/value&gt;
          &lt;/list&gt;
      &lt;/property&gt;
      &lt;property name="beanNames"&gt;
          &lt;list&gt;
              &lt;value&gt;myBean&lt;/value&gt;
          &lt;/list&gt;
      &lt;/property&gt;
  &lt;/bean&gt;
  </code></pre>
  
  <p>After embedded our app within a spring-boot started app, we are now getting these kinds of errors on startup (note NONE of these classes being proxied are 'final') but it appears that despite proxyTargetClass being = TRUE, something in Spring is trying to do a "proxy of a proxy??"</p>
  
  <p>If we change proxyTargetClass=FALSE, I guess it then uses JDK based proxies? However when we do that, our AOP interceptors are no longer being called... confused as to how to triage this issue. </p>
  
  <p>Any help appreciated.</p>
  
  <pre><code>Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy90]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy90
  at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:212)
  at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:109)
  at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:447)
  at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:333)
  at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:293)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:422)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1579)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
  ... 105 common frames omitted
  Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy90
  at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:446)
  at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)
  at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
  at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
  at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
  at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:317)
  at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:56)
  at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:202)
  ... 112 common frames omitted
  </code></pre>