Từ Spring Boot 2.6, circular reference giữa các bean bị cấm mặc định. Trước đó container tự phá vòng lặp 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 lặp 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 lặp — constructor injection fail-fast chính là thứ đang giúp bạn phát hiện vấn đề.