Tại sao chúng ta không thể tự động truyền tải biến cá thể tĩnh trong Spring bean. Tôi biết có một cách khác để đạt được điều này nhưng chỉ muốn biết tại sao chúng ta không thể làm theo cách dưới đây.
ví dụ
@Autowired
public static Test test;
Tại sao chúng ta không thể tự động truyền tải biến cá thể tĩnh trong Spring bean. Tôi biết có một cách khác để đạt được điều này nhưng chỉ muốn biết tại sao chúng ta không thể làm theo cách dưới đây.
ví dụ
@Autowired
public static Test test;
Câu trả lời:
Bởi vì việc sử dụng các trường tĩnh sẽ khuyến khích việc sử dụng các phương thức tĩnh. Và các phương pháp tĩnh là xấu xa. Mục đích chính của việc tiêm phụ thuộc là để vùng chứa tạo các đối tượng cho bạn và nối chúng. Ngoài ra, nó làm cho việc kiểm tra dễ dàng hơn.
Khi bạn bắt đầu sử dụng các phương thức tĩnh, bạn không cần phải tạo một phiên bản đối tượng nữa và việc kiểm tra sẽ khó hơn nhiều. Ngoài ra, bạn không thể tạo một số trường hợp của một lớp nhất định, mỗi trường hợp có một phụ thuộc khác nhau được đưa vào (vì trường được chia sẻ ngầm và tạo ra trạng thái toàn cục - cũng là ác).
@BeforeClass
trong SpringJUnit4ClassRunner và có phương thức đó truy cập bean @Autowired
trong thử nghiệm .. về cơ bản bạn không thể. Thật là khó chịu.
Bởi vì khi trình nạp lớp tải các giá trị tĩnh, ngữ cảnh Spring vẫn chưa được tải. Vì vậy, trình nạp lớp sẽ không đưa đúng các trường tĩnh vào bean và sẽ bị lỗi.
Theo khái niệm OOP, sẽ là một thiết kế tồi nếu các biến tĩnh được tự động tải.
Biến static không phải là thuộc tính của Object, nhưng nó là thuộc tính của Class. Hệ thống dây tự động của lò xo được thực hiện trên các đối tượng và điều đó làm cho thiết kế trở nên sạch sẽ theo quan điểm của tôi. Bạn có thể triển khai đối tượng bean có dây tự động dưới dạng singleton và đạt được điều tương tự khi xác định nó tĩnh.
Bằng giải pháp này, bạn có thể tự động tải trường tĩnh vào mùa xuân.
@Component
public class TestClass {
private static Test test;
@Autowired
public void setTest(Test test) {
TestClass.test = test;
}
}