java - अन्य वर्ग से स्थिर विधि से स्प्रिंग बीन की शुरुआत?




spring bean-validation (2)

मैं हाइबरनेट वैलिडेटर बीन बनाने की कोशिश कर रहा था, और इस समस्या को चलाने के लिए एक अन्य कक्षा में स्थिर कारखाना विधि से बीन बना रहा था। मुझे अपना वैलिडेटर बीन इनिशियलाइज़ (तल पर समाधान) प्राप्त करने का स्प्रिंग तरीका मिला, लेकिन समस्या स्वयं अनसुलझी है। Validator का उपयोग यहाँ उदाहरण के लिए किया जाता है।

यह है कि मैं जावा में Validator आवृत्ति कैसे बना सकता हूं

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

इस तरह से मैंने applicationContext.xml में सेम बनाने की कोशिश की

<bean id="validatorFactory" 
    class="javax.validation.ValidatorFactory" 
    factory-method="javax.validation.Validation.buildDefaultValidatorFactory" />

<bean id="validator" 
    class="javax.validation.Validator" 
    factory-bean="validatorFactory"
    factory-method="getValidator" />

जो मैं समझता हूं कि "फ़ैक्टरी-विधि" में आप केवल "क्लास" पैरामीटर में परिभाषित क्लास में परिभाषित स्थिर तरीकों तक पहुंच सकते हैं। चूंकि विधि buildDefaultValidatorFactory () स्थिर है I कैंट वैलिडेशन का एक उदाहरण बनाता है और इसे वैद्युतकणसंचलन के लिए "कारखाना-बीन" के रूप में देता है:

<bean id="validation" class="javax.validation.Validation" />

<bean id="validatorFactory" 
    class="javax.validation.ValidatorFactory" 
    factory-bean="validation"
    factory-method="buildDefaultValidatorFactory" />

यह त्रुटि संदेश पर समाप्त होता है

"जांचें कि निर्दिष्ट नाम के साथ एक विधि मौजूद है और यह गैर-स्थिर है "

सवाल यह है कि वसंत में आप इस तरह की स्थिति में बीन कैसे बनाएंगे?

इस तरह मैंने वालिडेट की समस्या हल की:

<bean id="validator"
  class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

क्या आपने यह कोशिश की?

<bean id="validatorFactory" 
class="javax.validation.Validation" 
factory-method="buildDefaultValidatorFactory" />

<bean id="validator" 
class="javax.validation.Validator" 
factory-bean="validatorFactory"
factory-method="getValidator" />

factory-method केवल विधि का नाम होना चाहिए, न कि वर्ग नाम सहित।

यदि आप एक स्थिर कारखाने का उपयोग करना चाहते हैं, तो बीन की घोषणा के लिए कारखाने की class (!) दें, यदि आप एक उदाहरण के कारखाने का उपयोग करना चाहते हैं, तो बीन घोषणा के लिए factory-bean दें, लेकिन दोनों न दें: निर्मित बीन का वर्ग बीन घोषणा में नहीं दिया गया है।

तो एक पूर्ण उदाहरण इस तरह दिखना चाहिए, validatorFactory लिए एक स्थिर कारखाने का उपयोग करना और validatorFactory लिए एक उदाहरण कारखाना:

<bean id="validatorFactory" 
    class="javax.validation.Validation" 
    factory-method="buildDefaultValidatorFactory" />

<bean id="validator" 
    factory-bean="validatorFactory"
    factory-method="getValidator" />

प्रलेखन पर विवरण देखें:

http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-class-static-factory-method

आपको सवाल का जवाब देने के लिए - आप वसंत में इस तरह की स्थिति में बीन कैसे बनाएंगे? - ठीक वैसा ही करें जैसा कि यहां दिखाया गया है, या यदि आप कर सकते हैं, तो एक उपयोगिता वर्ग का उपयोग करें जैसे कि LocalValidatorFactoryBean , जो स्प्रिंग कॉन्फ़िगरेशन को सरल करता है।





applicationcontext