2012-03-27 6 views
37

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

यह कैसे मैं जावा में सत्यापनकर्ता उदाहरण बनाने

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() स्थिर है मैं नहीं कर सकते मान्यता का एक उदाहरण बना सकते हैं और के रूप में इस तरह validatorFactory के लिए "कारखाने में सेम" यह दे:

<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"/> 

उत्तर

46

factory-method केवल विधि का नाम, वर्ग के नाम शामिल नहीं शामिल करना चाहिए:

यह मैं कैसे सत्यापनकर्ता समस्या हल है।

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

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

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

उत्तर देने के लिए:

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

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

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

+0

कक्षा का नाम यह दिखाने के लिए है कि मैं क्या करना चाहता हूं। जैसा कि मैंने कहा "मैं समझता हूं कि" फैक्ट्री-विधि "में आप केवल" कक्षा "पैरामीटर में परिभाषित कक्षा में परिभाषित स्थिर विधियों तक पहुंच सकते हैं।" – Spaideri

+0

यह सही है - यदि आप 'कक्षा' पैरामीटर देते हैं, तो फैक्ट्री विधि उस वर्ग की एक स्थिर विधि होनी चाहिए, जैसा कि 'validatorFactory' के निर्माण में देखा गया है। –

0

क्या आपने इसे आजमाया?

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

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

हाय!विधि buildDefaultValidatorFactory क्लास javax.validation.Validation की एक स्थिर विधि है – Spaideri

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