AOP problem running Spring unit tests

后端 未结 3 1548
南笙
南笙 2021-02-08 15:26

I have a Spring web application which is configured to use JDK proxying for AOP. The AOP annotations (such as @Transactional) are declared on the interfaces, rather than the imp

相关标签:
3条回答
  • 2021-02-08 16:00

    Sounds like you're referencing an implementation class instead of an interface. There is an excerpt here with more detail.

    A Spring forum post: "Mixing JDK and CGLIB proxies"

    A great blog post explaining pros and cons of JDK vs. CGLIB proxies.

    0 讨论(0)
  • 2021-02-08 16:09

    Hey Jean, CGLib proxies are created by subclassing the class to be proxied -- you're attempting to proxy another proxy which isn't allowed since proxies are themselves final classes. Hence:

    Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy25

    0 讨论(0)
  • 2021-02-08 16:10

    I don't know if the solution was already shared and I am also sure the original requester must have found a solution, since it is a one year old query. For public interest however let me mention it here. Spring was using CGLIB because of the following declaration.

    <!-- Post-processor for @Aspect annotated beans, which converts them into AOP advice --> 
    <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator">
          <property name="proxyTargetClass" value="true"/>
    </bean>
    

    The property should be set to false, so that the CGLIB is not triggered instead JDK Dynamic Proxying.

    <property name="proxyTargetClass" value="false"/>
    

    Hope that helps.

    0 讨论(0)
提交回复
热议问题