The problem is not in your Spring annotations but your design pattern. You mix together different scopes and threads:
- singleton
- session (or request)
- thread pool of jobs
The singleton is available anywhere, it is ok. However session/request scope is not available outside a thread that is attached to a request.
Asynchronous job can run even the request or session doesn’t exist anymore, so it is not possible to use a request/session dependent bean. Also there is no way to know, if your are running a job in a separate thread, which thread is the originator request (it means aop:proxy is not helpful in this case).
I think your code looks like that you want to make a contract between ReportController, ReportBuilder, UselessTask and ReportPage. Is there a way to use just a simple class (POJO) to store data from UselessTask and read it in ReportController or ReportPage and do not use ReportBuilder anymore?