2011-10-31 13 views
7

कोड की जांच के बाद मैंने पाया:कारखाने के तरीके के साथ वसंत बीन कैसे हो सकता है लेकिन कारखाने के बिना?

<bean id="TestBean" class="com.test.checkDate" 
factory-method="getPreviousDate"> 
<constructor-arg value ............. 

............................... 

कैसे यह संभव हो सकता है? धन्यवाद।

+0

"कारखाने के बिना" आपका क्या मतलब है? यदि आप प्रश्न को दोबारा बदल सकते हैं, तो यह जवाब पाने में मदद कर सकता है। –

उत्तर

24
डॉक्स

निर्माता सेम परिभाषा में निर्दिष्ट तर्क ExampleBean के निर्माता के लिए तर्कों के रूप में पारित करने के लिए उपयोग किया जाएगा से

। अब इस का एक संस्करण पर विचार जहां एक निर्माता उपयोग करने के बजाय, स्प्रिंग एक उदाहरण वस्तु की वापस जाने के लिए एक स्थिर कारखाने विधि कॉल करने के लिए कहा जाता है:

<bean id="exampleBean" class="examples.ExampleBean" 
     factory-method="createInstance"> 
    <constructor-arg ref="anotherExampleBean"/> 
    <constructor-arg ref="yetAnotherBean"/> 
    <constructor-arg value="1"/> 
</bean> 

<bean id="anotherExampleBean" class="examples.AnotherBean"/> 
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/> 

public class ExampleBean { 

    // a private constructor 
    private ExampleBean(...) { 
     ... 
    } 

    // a static factory method; the arguments to this method can be 
    // considered the dependencies of the bean that is returned, 
    // regardless of how those arguments are actually used. 
    public static ExampleBean createInstance (
      AnotherBean anotherBean, YetAnotherBean yetAnotherBean, int i) { 

     ExampleBean eb = new ExampleBean (...); 
     // some other operations... 
      return eb; 
    } 
} 

ध्यान दें कि स्थैतिक फैक्ट्री विधि के लिए तर्क कन्स्ट्रक्टर-एर्ग तत्वों के माध्यम से प्रदान किए जाते हैं, ठीक उसी तरह जैसे कि एक निर्माता के पास वास्तव में उपयोग किया गया था। साथ ही, यह जानना महत्वपूर्ण है कि का प्रकार कारखाना विधि द्वारा वापस लौटाया जाने वाला वर्ग होना चाहिए, जिस श्रेणी में स्थिर फैक्ट्री विधि, है, हालांकि इस उदाहरण में यह है। एक उदाहरण (गैर स्थैतिक) कारखाना विधि अनिवार्य रूप से समान फैशन में उपयोग किया जाएगा ( से वर्ग विशेषता के बजाय फैक्ट्री-बीन विशेषता का उपयोग), इसलिए विवरणों पर चर्चा नहीं की जाएगी।

+1

धन्यवाद ... आपने मुझे कुछ मूल्यवान समय बचाया। – Lahniep

1

इसका मतलब यह है कि com.test.checkDate में getPreviousDate नामक एक स्थिर विधि है। वस्तुओं का निर्माण करने वाला आपका कारखाना com.test.checkDate है। हम नहीं जानते कि वस्तु किस प्रकार लौटाई गई है, कॉन्फ़िगरेशन में नहीं कहा गया है, शायद java.util.Date है।

परिभाषा लौटाई गई वस्तु के प्रकार (वर्ग) को निर्दिष्ट नहीं करती है, केवल फैक्ट्री विधि वाली कक्षा निर्दिष्ट करती है।

constructor-arg बस getPreviousDate को पैरामीटर के रूप में पारित कर रहे हैं। चूंकि विधि स्थैतिक है, इसलिए इसे checkDate के उदाहरण की आवश्यकता नहीं है। यदि तकनीकी रूप से एक कन्स्ट्रक्टर नहीं है, तो एक विधि को कॉल करने के लिए constructor-arg का उपयोग करने में मजाकिया लगता है, तो सोचें कि स्थैतिक विधि वास्तव में ऑब्जेक्ट का निर्माण कर रही है, इसलिए इसे याद रखना आसान होगा।

के बाद से अपने जवाब के पिछले संस्करण में आप का उल्लेख "कारखाने के बिना", शायद आप instantiation using an instance factory method के मामले, जो factory-bean विशेषता की आवश्यकता के बारे में सोच रहे हैं, लेकिन इस Instantiation with a static factory method का मामला है।

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

  • कोई संबंधित समस्या नहीं^_^