I am having troubles invoking a method asynchronously in Spring, when the invoker is an embedded library receiving notifications from an external system. The code looks as below:
@Service
public class DefaultNotificationProcessor implements NotificationProcessor {
    private NotificationClient client;
    @Override
    public void process(Notification notification) {
        processAsync(notification);
    }
    @PostConstruct
    public void startClient() {
        client = new NotificationClient(this, clientPort);
        client.start(); 
    }
    @PreDestroy
    public void stopClient() {
        client.stop();
    }
    @Async
    private void processAsync(Notification notification) {
        // Heavy processing
    }
}
The NotificationClient internally has a thread in which it receives notifications from another system. It accepts a NotificationProcessor in its constructor which is basically the object that will do the actual processing of notifications.
In the above code, I have given the Spring bean as the processor and attempted to process the notification asynchronously by using @Async annotation. However, it appears the notification is processed in the same thread as the one used by NotificationClient. Effectively, @Async is ignored.
What am I missing here?
 
     
    