Không. Dependency được resolve một lần lúc singleton khởi tạo: Spring tạo đúng một instance prototype, tiêm vào, và singleton dùng lại instance đó suốt vòng đời. Đây là bẫy hay được hỏi vì code nhìn qua tưởng đúng.
Muốn lấy instance mới mỗi lần thì phải hỏi container tại thời điểm dùng:
java
@Service
public class ReportService {
private final ObjectProvider<ReportContext> contextProvider;
public ReportService(ObjectProvider<ReportContext> contextProvider) {
this.contextProvider = contextProvider;
}
public Report build() {
ReportContext ctx = contextProvider.getObject(); // mỗi lần gọi ra một instance mới
return ctx.render();
}
}Các cách khác cùng ý tưởng: ObjectFactory<T>, jakarta.inject.Provider<T>, hoặc method injection với @Lookup trên một method abstract.
Lưu ý kèm theo: Spring không quản lý trọn vòng đời của prototype bean — callback khởi tạo vẫn chạy nhưng callback huỷ thì không. Nếu prototype giữ tài nguyên (file handle, connection), code gọi phải tự đóng.