То, что у вас действительно есть, - это проблема иерархии зависимостей. Предлагаемое вами хакерское решение на самом деле является всего лишь бинтом по основной проблеме.
Что вы действительно должны учитывать, так это архитектуру вашей системы, поскольку в действительности у вас есть круговая зависимость (см. Обсуждение в комментариях к исходному сообщению). У вас (нравится вам это или нет) A требуется обслуживание (и в некотором смысле это зависит от) B и C. Между тем, B и C напрямую зависят от A, и поэтому не может запускаться, пока не появится A .
В лучшем случае вы можете написать код на B и C для прослушивания существования A, но это в лучшем случае маскирует (как я уже говорил) основную проблему. Что вы должны рассмотреть, так это разделить A на два набора, назовем их A1 и A2.
A1 должен предоставлять интерфейс, который требуется B и C (зависит от). А2 должен иметь слушателей, от которых зависят сервисы B и C. При запуске, если B и C требуются службы, A1 должен быть запущен, но A2 может запуститься в любое время позже, и все должно работать.