2013-05-15 7 views
7

क्या @Resource वैकल्पिक बनाने का कोई तरीका है? इसका मतलब है कि अगर मेरे पास @Resource द्वारा अनुरोध किए गए प्रकार का बीन नहीं है, तो मुझे अपवाद नहीं मिलेगा, लेकिन यह सिर्फ शून्य पर सेट होगा।आप @Resource वैकल्पिक कैसे बनाते हैं?

+0

यहां देखें http://stackoverflow.com/questions/3957430/optional-spring-bean-references.It आपके लिए उपयोगी हो सकता है – PSR

+0

ठीक है ऐसा लगता है कि यह संभव नहीं है। @Autowired (आवश्यक = झूठी) का उपयोग करना पड़ा। मैं वास्तव में क्या चाहता था, लेकिन यह – MrProper

उत्तर

2

ठीक है ऐसा लगता है कि यह संभव नहीं है। @Autowired (आवश्यक = झूठी) का उपयोग करना पड़ा। मैं वास्तव में क्या नहीं चाहता था, लेकिन यह करेगा।

+0

करेगा यह संसाधन वैकल्पिक बनाता है, इसलिए आप यह करना चाहते हैं, भले ही आप इसे नहीं जानते :) –

+1

स्वत: और संसाधन दो अलग-अलग चीजें हैं, <उपयोग को इंजेक्ट करने का प्रयास करें : नक्शा आईडी = "myMap"> ऑटोवायर के साथ - यह केवल बीन्स के लिए काम करेगा लेकिन संसाधनों के लिए नहीं –

+0

@ डैन्यूबियन सेलर - '@ ऑटोवायर' एक वसंत एनोटेशन है, जबकि' संसाधन 'एक सामान्य जावा एनोटेशन है। यदि आप वसंत का उपयोग नहीं कर रहे हैं, तो '@ Autowired' भी एक विकल्प नहीं होगा। –

0

आप इस लक्ष्य को हासिल करने के लिए एक कस्टम कारखाने सेम का उपयोग करने में सक्षम होना चाहिए:

अपने वैकल्पिक सेम के लिए
public class OptionalFactoryBean<T> implements BeanFactoryAware, FactoryBean<T> { 

    private String beanName; 

    public void setBeanName(String beanName) { 
     this.beanName = beanName; 
    } 

    @Override 
    public T getObject() throws Exception { 
     T result; 
     try { 
      result = beanFactory.getBean(beanName); 
     } catch (NoSuchBeanDefinitionException ex) { 
      result = null; 
     } 
     return result; 
    } 

    private BeanFactory beanFactory; 

    @Override 
    public void setBeanFactory(BeanFactory beanFactory) { 
     this.beanFactory = beanFactory; 
    } 

    private Class<?> objectType = Object.class; 

    public void setObjectType(Class<?> objectType) { 
     this.objectType = objectType != null? objectType : Object.class; 
    } 

    @Override 
    public Class<?> getObjectType() { 
     return objectType; 
    } 

    @Override 
    public boolean isSingleton() { 
     return true; 
    }  
} 

स्प्रिंग विन्यास होगा:

<bean id="myBean" class="mypackage.OptionalFactoryBean" scope="singleton"> 
    <property name="beanName" value="myRealBean"/> 
    <property name="objectType" value="mypackage.MyRealBean"/> 
</bean> 

और तुम null इंजेक्शन मिलेगा। फिर आप परिभाषित कर सकते हैं:

<bean id="myRealBean" class="mypackage.MyRealBean" ...> 
    <!-- .... --> 
</bean> 

यदि आप कुछ विशेष बीन इंजेक्ट करना चाहते हैं।

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