2012-02-04 34 views
8

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

13

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@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.

+0

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

+0

@ 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

Các vấn đề liên quan