2015-07-14 19 views
5

Tôi có một giao diện và nhiều lớp triển khai, khoảng 10, của giao diện này.Mùa xuân Nhiều triển khai cùng một giao diện

Tôi có một quy ước đặt tên như prefix + name + suffix nên trong thời gian chạy, tôi có thể thêm @Autowired private Map<String, MyInterface> myImplementations; và sau đó truy cập vào lớp thực hiện với myImplementations.get() phương pháp.

Có cách nào tốt hơn để truy cập vào các triển khai đó không? Tôi chỉ biết cái gì. Tôi cần trong thời gian chạy, các thay đổi tùy thuộc vào thông báo tôi nhận được.

Trả lời

3

Bạn có thể thực hiện giao diện BeanFactoryAware trong lớp học của bạn và sau đó sử dụng bean factory tiêm để có được thực hiện cần thiết:

Interface impl = beanFactory.getBean("interfaceimpl"); 

hoặc

Interface impl = beanFactory.getBean(InterfaceImpl.class); 
+0

là là bằng cách nào đó tốt hơn so với phương pháp hiện tại của tôi? Bởi vì tôi cần phải thực hiện một giao diện khác trong trường hợp của bạn? –

+0

Đó là nhiều hơn trong "cách mùa xuân" của việc làm. Hơn nữa, nếu nó xảy ra mà bạn bổ sung thêm các triển khai mới và tải lại bối cảnh khi chạy, bạn sẽ không cần phải cấu hình lại bất cứ điều gì, bởi vì Spring sẽ làm điều đó cho bạn. – Mikhail

+0

Ok, tôi hiểu rõ vấn đề của bạn. Tôi chỉ cần thực hiện BeanFactoryAware một lần, trên lớp mà tôi đang làm công việc, hoặc một riêng biệt, không phải tất cả các triển khai. Đó là rất tốt đẹp, cảm ơn. –

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