Here is the problem -
I was using @Async provided by Spring to execute some methods asynchronously. However, because it is proxy based, it wouldn't work if the method is called from within the same class. I do need my async methods to be called from within the same class.
I know if I use AspectJ instead of Spring AOP, I will be able to do that.
So my question is, is there a way to use Spring's @Async and load time weave it? Or, is there an AspectJ based async execution aspect already written that I can use, instead of writing my own?
One thing you can do is toss together a bean whose only purpose is to run things asynchronously and pass the work to it inside the method. This may not make the API as pretty if you like to put @Async on your interfaces or whatever, but it gets the job done.
Yes, annotate a concrete class' method with
@Async
, putspring-aspects
JAR (which contains the async aspect) into your classpath, use<task:annotation-driven mode="aspectj" />
in your Spring config and apply either compile-time or load-time weaving, referencingspring-aspects
as an aspect library.