After more than three hours of researching the code and modifying the Spring bean's XML definitions, I finally found the problem. This can be found from this part of stacktrace, which I noticed after finding a solution:
at org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor.postProcessAfterInitialization(AsyncAnnotationBeanPostProcessor.java:126)
Based on the note here , I changed all the attributes of the proxy target class to false in <aop:config> , <aop:aspectj-autoproxy> and <tx:annotation-driven> , but for no success.
Then I started removing parts of my XML definition to find which one fixes this problem. Commenting out <task:annotation-driven> helped, and the problem was resolved. Then I saw that this element has a mode attribute, which I did not specify, therefore its default proxy value is used, and therefore CGLIB is required. When I changed mode="aspectj" , the problem is resolved:
<task:annotation-driven scheduler="dataProviderScheduler" executor="dataProviderExecutor" mode="aspectj" />
source share