For @RequestScoped services, Isis creates a proxy that implements the RequestScopedService interface (in Isis core-runtime), which defines __isis_startRequest and __isis_stopRequest. These methods are then called when the Isis session (=request scope) is created so that the proxy can instantiate a service for the duration of the request, bound to the thread-local.
The underlying service doesn't actually know it has been created/a request is started. It isn't possible to put logic in the constructor, because that stuff is also called by the proxy wrapper.
... a bit of research shows that the JEE way of doing this is to call methods annotated @PostConstruct and @PreDestroy. So that's what we should do too.