2014-09-10 14 views
13
@Configuration 
public class MyConfig { 
    @Bean(name = "myObj") 
    public MyObj getMyObj() { 
     return new MyObj(); 
    } 
} 

मेरे पास @Configuration स्प्रिंग एनोटेशन के साथ यह MyConfig ऑब्जेक्ट है। मेरा सवाल यह है कि मैं बीन प्रोग्रामेटिक रूप से (नियमित कक्षा में) कैसे प्राप्त कर सकता हूं?बीन प्रोग्रामेटिक रूप से

उदाहरण के लिए, कोड स्निपेट इस तरह दिखता है। अग्रिम धन्यवाद।

public class Foo { 
    public Foo(){ 
    // get MyObj bean here 
    } 
} 

public class Var { 
    public void varMethod(){ 
      Foo foo = new Foo(); 
    } 
} 
+0

'Autowire'ing ... या अधिक सटीक' @Qualifier ("myObj") 'आज़माएं। –

+0

मैं @Autowire नहीं कर सकता क्योंकि मुझे रनटाइम – user800799

+0

में नए का उपयोग करके Foo ऑब्जेक्ट बनाना है [Qualifier एनोटेशन] (http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference /html/beans.html#beans-autowired-annotation-qualifiers)। –

उत्तर

6

यहाँ एक उदाहरण

public class MyFancyBean implements ApplicationContextAware { 

    private ApplicationContext applicationContext; 

    void setApplicationContext(ApplicationContext applicationContext) { 
    this.applicationContext = applicationContext; 
    } 

    public void businessMethod() { 
    //use applicationContext somehow 
    } 

} 

हालांकि आप शायद ही कभी सीधे ApplicationContext का उपयोग करने की जरूरत है। आम तौर पर आप इसे एक बार शुरू करते हैं और बीन्स स्वयं को स्वचालित रूप से पॉप्युलेट करते हैं।

ये रहा:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 

नोट आप की जरूरत नहीं है कि पहले से ही applicationContext.xml में शामिल फ़ाइलों का उल्लेख। अब आप बस नाम या प्रकार के आधार पर एक सेम लाने कर सकते हैं:

ctx.getBean("someName") 

तरीके वसंत शुरू करने के लिए की टन कर रहे हैं ध्यान दें कि - ContextLoaderListener, @Configuration वर्ग, आदि का उपयोग कर

2

सरल (हालांकि नहीं साफ) दृष्टिकोण यदि आप वास्तव में सेम लाने के लिए ApplicationContext से अपने वर्ग ApplicationContextAware इंटरफ़ेस को लागू और setApplicationContext() तरीका प्रदान करने के लिए है की जरूरत है।

एक बार जब आप ApplicationContext का संदर्भ लेते हैं तो आपके पास कई विधियों तक पहुंच है जो आपको बीन उदाहरण वापस कर देंगे।

नकारात्मकता यह है कि इससे आपकी कक्षा वसंत संदर्भ के बारे में जागरूक हो जाती है, जिसे किसी को जरूरी होने तक टालना चाहिए।

5

इस प्रयास करें:

public class Foo { 
    public Foo(ApplicationContext context){ 
     context.getBean("myObj") 
    } 
} 

public class Var { 
    @Autowired 
    ApplicationContext context; 
    public void varMethod(){ 
      Foo foo = new Foo(context); 
    } 
} 
+1

@Xstian मैं 'ApplicationContext' के माध्यम से भी जाता हूं। ; डी –

+0

आप सही हैं, समान समाधान हैं: डी – Xstian

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