Spring @Async method inside a Service

I solved the third method (divide it in two beans) changing the async method's access modifier to public:

@Service
public class MyService {

    @Autowired
    MyAsyncService myAsyncService;

    public void worker() {
        myAsyncService.asyncJob();
    }
}

@Service
public class MyAsyncService {

    @Async
    public void asyncJob() { // switched to public
        ...
    }

}

Found a really nice way to solve this (with java8) in the case where you have a lot of various things you want to both sync and async. Instead of creating a separate XXXAsync service for each 'synchronous' service, create a generic async service wrapper:

@Service
public class AsyncService {

    @Async
    public void run(final Runnable runnable) {
        runnable.run();
    }
}

and then use it as such:

@Service
public class MyService {

    @Autowired
    private AsyncService asyncService;


    public void refreshAsync() {
        asyncService.run(this::refresh);
    }


    public void refresh() {
        // my business logic
    }


    public void refreshWithParamsAsync(String param1, Integer param2) {
        asyncService.run(() -> this.refreshWithParams(param1, param2));
    }


    public void refreshWithParams(String param1, Integer param2) {
        // my business logic with parameters
    }

}