I maded InMoov2's peer "mouth" service without any direct internal references (There is no InMoov2.mouth) - and that not only reduced and simplified the amount of code in the service, but allows for very quick and easy swapping between Speech Synthesis services. For testing I tested swapping between Polly and MarySpeech without restarting.
Much of the code is simplified, because its all message based without a direct reference. If the service doesn't exist messages "to speak" simply are published but no reciever picks them up. No more testing "null" cases or npe's !