Thật khó để giải thích những gì tôi thực sự muốn. Tôi có một giao diện có phương thức getRuntimeInfo()
cung cấp cho tôi tất cả thông tin gỡ lỗi thời gian chạy cho các biến của một lớp. Tôi muốn xem danh sách tất cả các lớp thực hiện giao diện này. Tôi đang sử dụng Java và Spring. Một cách tôi có thể thực hiện việc này là lấy tất cả các bean từ Spring Context và kiểm tra bằng cách sử dụng toán tử instanceof
. Nhưng tôi sẽ không muốn làm điều đó cho các tác động hiệu suất rõ ràng. Tôi có lựa chọn nào khác không?Theo dõi tất cả các lớp triển khai một giao diện cụ thể?
Trả lời
gì về giải pháp này:
@Component
public class WithAllMyInterfaceImpls {
@Autowire
List<MyInterface> allBeansThatImplementTheMyInterface;
}
danh sách chỉ được phổ biến một lần (lúc khởi động) vì vậy không nên có một tác động đáng kể trong việc thực hiện thời gian chạy "bình thường".
Comment:
bạn có thể giải thích code của bạn
Bạn biết mùa xuân là một IOC Container. @Component
cho Spring biết rằng nó sẽ tạo ra một cá thể của lớp này (một cái gọi là Spring Managed Bean). IOC cũng có nghĩa là Container chịu trách nhiệm đưa các tham chiếu đến các trường hợp khác (Spring Managed Beans). @Autowire
(cũng như @Resource
và @Inject
- tất cả đều giống nhau) là một chú thích cho Spring biết rằng trường này phải được điền bởi Spring. Bản thân Spring cố gắng tìm ra trường hợp nào nên điền vào. Kỹ thuật mặc định mà lò xo sử dụng là by type
điều này có nghĩa là Spring kiểm tra loại trường và tìm kiếm các bean phù hợp. Trong trường hợp của bạn, nó là một danh sách chung - đây là một chút đặc biệt. Trong trường hợp này, Spring điền vào trường có một danh sách, trong đó các phần tử là tất cả các bean phù hợp với kiểu generic.
Phương pháp getBeansOfType từ ApplicationContext như thế nào? Nó trả về một bản đồ của các hạt đậu thực hiện giao diện của bạn?
- 1. Thực hiện ngay tất cả các lớp đang triển khai một giao diện cụ thể
- 2. Cách tìm tất cả các lớp thực hiện giao diện cụ thể?
- 3. Triển khai tất cả thành viên giao diện
- 4. Bắt tất cả các lớp thực hiện một giao diện cụ thể trong WinRT
- 5. Liệt kê tất cả các lớp Delphi thực hiện một giao diện cụ thể?
- 6. Nhận tất cả các triển khai đã đăng ký của một giao diện trong Autofac
- 7. Lớp học có thể mở rộng cả lớp và triển khai Giao diện
- 8. IntelliJ có thể thêm @Overrrides vào tất cả các phương thức của một giao diện cụ thể không?
- 9. JAXB - các lớp được tạo ra triển khai giao diện
- 10. Có thể liên kết các giao diện khác nhau với cùng một cá thể của một lớp đang triển khai tất cả chúng không?
- 11. Nhận xét giao diện, triển khai hoặc cả hai?
- 12. Tại sao phương thức giao diện C# được triển khai trong một lớp là công khai?
- 13. Giao diện triển khai lớp chung không thành công
- 14. Giao diện triển khai C#
- 15. Thừa kế song song giữa các lớp giao diện và lớp triển khai trong C++
- 16. Tại sao giao diện không thể triển khai giao diện khác?
- 17. C# Lớp trừu tượng triển khai Giao diện
- 18. Triển khai giao diện không tương thích
- 19. Giao diện triển khai lớp ẩn danh trong C#?
- 20. Mã & theo dõi/triển khai dữ liệu
- 21. Mô hình tốt để lưu trữ triển khai của một giao diện và truy xuất các triển khai cụ thể là gì?
- 22. cách triển khai Giao diện trong C++?
- 23. TinyIoC - Nhiều triển khai giao diện
- 24. Tại sao lớp của tôi không thể triển khai giao diện được khai báo bên trong?
- 25. Tìm tất cả các loại cha (cả hai lớp cơ sở và giao diện)
- 26. Visual Studio - tự động triển khai tất cả các phương pháp được kế thừa từ giao diện
- 27. Nhận tất cả các loại triển khai loại hình chung mở cụ thể
- 28. Làm thế nào để tìm ra phương pháp đang triển khai giao diện cụ thể
- 29. Tiêm các lớp khác nhau triển khai cùng một giao diện bằng cách sử dụng Ninject
- 30. Java: mở rộng một lớp và triển khai một giao diện có cùng phương thức
Chỉ là tính năng autowiring mùa xuân bình thường, không có gì đặc biệt. Nó chỉ là tính năng cốt lõi của mùa xuân – Ralph
@ user1117398: Tôi đã mở rộng câu trả lời của mình để giải thích nó một chút. - Có vẻ như bạn nên đọc một Spring 3.0 !!! hoặc 3.1 hướng dẫn. – Ralph