Hôm nay, chúng tôi thấy mô hình này trong mã của chúng tôi:Tìm đậu singleton stateful
class Foo {
private List<String> errors;
public void addError(String error) { ... }
public List<String> getErrors();
}
Mặc dù mã dường như làm việc, đây là một Spring bean singleton và nó tiêm ở một số nơi độc lập và người tiêu dùng của bean giả sử rằng mỗi người đều có danh sách lỗi riêng. Vì vậy, điều này giới thiệu các lỗi tinh tế.
Giải pháp rõ ràng là giáo dục các nhà phát triển để tránh loại lỗi này nhưng tôi đã tự hỏi liệu có một công cụ phân tích mã tĩnh hoặc thời gian chạy có thể tìm thấy loại lỗi này hay không.
Ví dụ: trình xử lý hậu đậu có thể phân tích bean trước khi được trả lại và tìm kiếm các trường riêng tư không phải là @Autowired
.
Chúng tôi có thể sử dụng @postConstruct để đặt lại trường riêng tư đó không? – sreeprasad
@SREEPRASADGOVINDANKUTTY: Bạn có thể thử nhưng nó sẽ không hoạt động vì '@ PostConstruct' sẽ chỉ được gọi một lần khi tạo Foo. Bạn không thể sử dụng '@ PostConstruct' trong bean A để đặt lại trường vì nó cũng sẽ xóa danh sách cho bean B. –
Mặc dù không phải là một cách rất sạch sẽ, bạn có thể thử APO mùa xuân, thêm afterAdvice và trong phương pháp đó bạn có thể kiểm tra các lĩnh vực này. –