Ответ на этот тип проблемы не зависит от пружины и тот же, если вы кодировали это в прямой Java, используя обычные конструкторы.
Простое решение состоит в том, чтобы разрешить настройку вашего композита с использованием инжектора сеттера, чтобы он нарушил цикл ссылок, необходимых при построении, но это умаляет идеализм инжекции конструктора. Альтернативой является создание подкласса Composite, который делегирует другому Composite. Это позволит вам заполнить фактическую ссылку позже, хотя и не идеально, но вы можете использовать метод spring @postContstruct, чтобы проверить, что ссылка действительно установлена, что обеспечивает такие же гарантии, как при использовании обычного конструктора.
Существуют фреймворки, которые автоматически обрабатывают этот круговой конструктор (например, наноконтейнер ), вводя прокси, но на самом деле это просто скрывает запах дизайна с временным освежителем. В конечном счете, вам нужно двухэтапное построение для достижения этой цели - это невозможно с чистыми конструкторами в java, поскольку для прерывания цикла зависимостей требуется использование неконструктивного инициализатора.
Написание функциональных тестов для этих классов, работающих вместе, может помочь выделить проблему проектирования с другой точки зрения.