2011-03-10 11 views
10

मैं विधिContext.getBean (स्ट्रिंग नाम, कक्षा आवश्यक टाइप) विधि का उपयोग कर रहा हूं। बीन प्रकार का उपयोग है: सेट। मेरे कोड लगता है:स्प्रिंग getBean टाइप सत्यापन

Set<String> mySet = context.getBean("myBean", Set.class); 

मैं जानना चाहता हूँ कुछ इस तरह कैसे करना है प्रकार कास्टिंग चेतावनी से बचने के लिए है:

Set<String> mySet = context.getBean("myBean", Set<String>.class); 

मुझे यकीन है कि अगर यह के प्रकार निर्धारित करना संभव है नहीं कर रहा हूँ इस तरह से एक वर्ग। क्या मैं सपना देख रहा हूं या ऐसा करने का कोई तरीका है?

धन्यवाद।

उत्तर

3

वास्तव में नहीं, लेकिन एक रनटाइम वर्कअराउंड है जो कम से कम @SuppressWarnings की आवश्यकता को हटा देता है। आप अपने वर्ग सार बना सकते हैं और स्प्रिंग साधन अपने कोड है:

public abstract class Test { 
    Set<String> getMyBean(); 
} 

और फिर अपने एक्सएमएल config में एक lookup method इंजेक्षन:

<bean class="Test"> 
    <lookup-method name="myBean" bean="myBean" /> 
</bean> 

यह वास्तव में स्थिर की जाँच नहीं की है, लेकिन यह विफल फास्ट पर रनटाइम और आप अपने कोड से बदसूरत कास्टिंग रखें।

1

शायद यह आप के लिए उपयोगी हो सकता है:

Set<String> setBean= null; 
Map<String, Set> beans = applicationContext.getBeansOfType(Set.class); 
for (Map.Entry<String, Set> bean: beans.entrySet()) { 
    ParameterizedType thisType = (ParameterizedType) bean.getClass().getGenericSuperclass(); 
    Class<?> parametrizedClass= thisType.getActualTypeArguments()[0]; 
    if (parametrizedClass.isAssignableFrom(String)) { 
     setBean= (Set<String>) bean; 
    } 
} 

http://javahelp.redsaltillo.net

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