2012-03-27 23 views
37

Hazırda Bekletme Validator çekirdeği oluşturmaya çalışıyordum ve bu soruna başka bir Sınıftaki statik fabrika yönteminden fasulye oluşturmaya çalışıyordum. Validator fasulyemi başlattığım (altta çözelti) bir Spring yolunu buldum, ama problemin kendisi çözümsüz kalıyor. Validator burada örnek bir durum olarak kullanılır.Yay fasulyesini başka bir Sınıftan statik yöntemden başlatılıyor mu?

Bu benim

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

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

Bu benim applicationContext.xml fasulye oluşturmaya çalıştık nasıl Java Doğrulayıcı örneğini oluşturmak nasıl

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

Anlamadığım o "fabrika olduğunu yöntem "yalnızca" sınıf "parametresinde tanımlanan Sınıfta tanımlanan statik yöntemlere erişebilirsiniz. yöntem buildDefaultValidatorFactory() statik olduğundan ben Doğrulama bir örneğini oluşturmak ve bunun gibi validatorFactory için "fabrika fasulye" olarak bunu veremezsin:

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

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

Bu mesaj

hata biter " kontrol belirtilen adla bir yöntem var olduğunu ve bunun olduğunu statik olmayan "

soru ilkbaharda bir durum bu tür fasulye yaratacak nasıl?

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

cevap

46

factory-method tek sınıf adıyla birlikte yöntem adı içermelidir:

Bu benim Validator problemi nasıl çözdüğünü olduğunu.

Statik bir fabrika kullanmak isterseniz, bir fabrika örneği kullanmak istiyorsanız, class ürününü (!) Fasülye beyanına verin, factory-bean ürününü fasulye beyanına verin. : Fasulye beyanında, yaratılan fasülyenin sınıfı verilmez.

Yani tam bir örnek validator için validatorFactory için statik fabrikası ve bir örnek fabrika kullanarak, bu gibi görünmelidir:

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

cevaplamak için:

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

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

belgelerinde ilgili ayrıntılara bakın Sorunuz - İlkbaharda böyle bir durumla nasıl fasülye yaratırsınız? - Tam olarak burada gösterildiği gibi yapın veya yapabilirseniz, LocalValidatorFactoryBean gibi bir yardımcı sınıf kullanın, bu da Bahar yapılandırmasını basitleştirir.

+0

Sınıf adı, ne yapmak istediğimi göstermek için var. "Anladığım kadarıyla" fabrika yönteminde "," sınıf "parametresinde tanımlanan Sınıfta tanımlanan statik yöntemlere erişebildiğinizi söyledim." – Spaideri

+0

Bu doğrudur - eğer 'class' parametresini verirseniz, fabrika yöntemi' validatorFactory 'yaratılmasında görüldüğü gibi bu Sınıfın statik bir yöntemi olmalıdır. –

0

Bunu denediniz mi?

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

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

Merhaba!method buildDefaultValidatorFactory, sınıf javax.validation.Validation'ın statik bir yöntemidir – Spaideri

İlgili konular