2012-03-14 7 views
9

मैं वसंत एनोटेशन का उपयोग कर रहा हूं और मैं आलसी प्रारंभिक उपयोग करना चाहता हूं।वसंत @Autowired @Lazy

मैं एक समस्या में भाग रहा हूं कि जब मैं किसी अन्य वर्ग से एक बीन आयात करना चाहता हूं तो मुझे @Autowired का उपयोग करने के लिए मजबूर होना पड़ता है जो आलसी init का उपयोग नहीं करता है। क्या इस आलसी init व्यवहार को मजबूर करने के लिए वैसे भी है?

इस उदाहरण में मैं कभी भी प्रिंटिंग पैरेंट बीन "नहीं देखना चाहता हूं क्योंकि मैं केवल childBean लोड कर रहा हूं जिसकी lazyParent पर कोई निर्भरता नहीं है।

@Configuration 
public class ConfigParent { 
    @Bean 
    @Lazy 
    public Long lazyParent(){ 
     System.out.println("Loading parent bean"); 
     return 123L; 
    } 

} 

@Configuration 
@Import(ConfigParent.class) 
public class ConfigChild { 
    private @Autowired Long lazyParent; 
    @Bean 
    public Double childBean() { 
     System.out.println("loading child bean"); 
     return 1.0; 
    } 
    @Bean 
    @Lazy 
    public String lazyBean() { 
     return lazyParent+"!"; 
    } 
} 

public class ConfigTester { 
    public static void main(String[] args) { 
     ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigChild.class); 
     Double childBean=ctx.getBean(Double.class); 
     System.out.println(childBean); 

    } 

} 

उत्तर

11

क्योंकि आप @Autowired Long lazyParent उपयोग कर रहे हैं, स्प्रिंग कि निर्भरता का समाधान हो जाएगा जब संदर्भ शुरू होता है। तथ्य यह है कि lazyBean@Lazy है अपरिवर्तनीय है।

एक विकल्प के रूप में इस प्रयास करें, हालांकि मैं नहीं कर रहा हूँ 100% इस Wil lwork आश्वस्त के रूप में आप यह करना चाहते हैं:

@Configuration 
@Import(ConfigParent.class) 
public class ConfigChild { 

    private @Autowired ConfigParent configParent; 

    @Bean 
    public Double childBean() { 
     System.out.println("loading child bean"); 
     return 1.0; 
    } 

    @Bean 
    @Lazy 
    public String lazyBean() { 
     return configParent.lazyParent() + "!"; 
    } 
} 

पी.एस. मुझे आशा है कि आप वास्तव में स्ट्रिंग्स, डबल्स और लॉन्ग को बीन्स के रूप में परिभाषित नहीं कर रहे हैं, और यह कि यह सिर्फ एक उदाहरण है। सही...?

+3

मुझे बस 'शून्य' बीन की यह भयानक दृष्टि थी। टीडीडब्ल्यूटीएफ के लिए एक मुझे लगता है ... –

+6

शून्य बीन उन सभी पर शासन करने के लिए। उन्हें खोजने के लिए शून्य बीन। शून्य बीन उन्हें सभी लाने के लिए, और निर्भरता इंजेक्शन में उन्हें –

+0

@ स्कैमैन बांधें क्या मैं पूछ सकता हूं कि मुझे स्ट्रिंग्स को बीन्स के रूप में परिभाषित क्यों नहीं करना चाहिए? – wings

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