Từ Spring Boot 2.6, circular reference giữa các bean bị cấm mặc định. Trước đó container tự gỡ vòng phụ thuộc bằng cách tiêm bean chưa khởi tạo xong, giờ nó fail-fast ngay lúc startup.
Cách chữa nhanh (chỉ để unblock deploy):
spring.main.allow-circular-references=trueCách chữa đúng, theo thứ tự ưu tiên:
1. Tách phần dùng chung của A và B ra một bean C, cả hai cùng phụ thuộc C. Vòng phụ thuộc thường là dấu hiệu hai service ôm chung một trách nhiệm.
2. Đảo chiều bằng event: A publish ApplicationEvent, B lắng nghe — bỏ hẳn tham chiếu trực tiếp.
3. @Lazy trên một đầu của vòng để Spring tiêm proxy, hoãn khởi tạo. Đây là giải pháp làm dịu triệu chứng, không sửa thiết kế.
Lưu ý: chuyển từ constructor injection sang field injection cũng làm app chạy được, nhưng chỉ là giấu vòng phụ thuộc — constructor injection fail-fast chính là thứ đang giúp bạn phát hiện vấn đề.