2012-02-04 11 views
8

यह समझाना मुश्किल है कि मैं वास्तव में क्या चाहता हूं। मेरे पास एक इंटरफ़ेस है जिसमें एक विधि getRuntimeInfo() है जो मुझे कक्षा के चर के लिए सभी रनटाइम डीबग जानकारी प्रदान करती है। मैं इस इंटरफ़ेस को लागू करने वाले सभी वर्गों की सूची देखना चाहता हूं। मैं जावा और स्प्रिंग का उपयोग कर रहा हूँ। एक तरीका मैं यह कर सकता हूं कि वसंत संदर्भ से सभी सेम प्राप्त करें और instanceof ऑपरेटर का उपयोग करके जांचें। लेकिन मैं स्पष्ट प्रदर्शन प्रभावों के लिए ऐसा नहीं करना चाहता हूं। क्या मेरे पास कुछ और विकल्प है?किसी विशेष इंटरफ़ेस को लागू करने वाले सभी वर्गों का ट्रैक रखें?

उत्तर

13

क्या इस समाधान के बारे में:

@Component 
public class WithAllMyInterfaceImpls { 

    @Autowire 
    List<MyInterface> allBeansThatImplementTheMyInterface; 

} 

सूची केवल (शुरू में) एक बार से भर जाता है तो यह "सामान्य" क्रम प्रदर्शन में एक महत्वपूर्ण प्रभाव नहीं होना चाहिए।


टिप्पणी:

आप अपने कोड

तुम्हें पता है वसंत एक आईओसी कंटेनर है व्याख्या कर सकते हैं। @Component वसंत को बताता है कि इसे इस वर्ग का एक उदाहरण बनाना चाहिए (एक तथाकथित स्प्रिंग प्रबंधित बीन)। आईओसी का मतलब यह भी है कि कंटेनर अन्य उदाहरणों (वसंत प्रबंधित बीन्स) के संदर्भों को इंजेक्ट करने के लिए ज़िम्मेदार है। @Autowire (साथ ही साथ @Resource और @Inject - सभी एक ही करते हैं) ऐसी एनोटेशन है जो वसंत को बताती है कि इस क्षेत्र को वसंत द्वारा पॉप्युलेट किया जाना चाहिए। वसंत स्वयं यह पता लगाने की कोशिश करता है कि किस क्षेत्र को मैदान में जाना चाहिए। वसंत उपयोगों की एक डिफ़ॉल्ट तकनीक by type है इसका मतलब है कि वसंत क्षेत्र के प्रकार का निरीक्षण करता है, और मिलान करने वाले सेम की खोज करता है। आपके मामले में यह एक सामान्य सूची है - यह थोड़ा खास है। इस मामले में वसंत एक सूची के साथ क्षेत्र को पॉप्युलेट करता है, जहां तत्व सभी बीन्स होते हैं जो सामान्य प्रकार से मेल खाते हैं।

+0

बस सामान्य वसंत ऑटोवॉयरिंग सुविधा है, कुछ खास नहीं है। यह सिर्फ मूल वसंत सुविधा – Ralph

+0

@ user1117398 है: मैंने इसे थोड़ा सा समझाने के लिए अपना उत्तर बढ़ाया। ऐसा लगता है कि आपको स्प्रिंग 3.0 पढ़ना चाहिए !!! या 3.1 ट्यूटोरियल। – Ralph

संबंधित मुद्दे

 संबंधित मुद्दे