Stavo cercando di creare bean Hibernate Validator e mi sono imbattuto in questo problema nella creazione di un bean dal metodo factory statico in un'altra classe. Ho trovato un modo per far inizializzare il mio bean Validator (soluzione in fondo), ma il problema rimane irrisolto. Il validatore è usato come esempio qui.Inizializzazione del bean Spring dal metodo statico di un'altra classe?
Ecco come ho creato l'istanza Validator in Java
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Ecco come ho cercato di creare il fagiolo in 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" />
Quello che ho capito è che in "fabbrica metodo "è possibile accedere solo ai metodi statici definiti nella classe definita nel parametro" classe ". Dal momento che il metodo buildDefaultValidatorFactory() è statico non posso creare un'istanza di convalida e dare come "fabbrica-bean" per il validatorFactory come questo:
<bean id="validation" class="javax.validation.Validation" />
<bean id="validatorFactory"
class="javax.validation.ValidatorFactory"
factory-bean="validation"
factory-method="buildDefaultValidatorFactory" />
Questo finisce al messaggio di errore
" verificare che un metodo con il nome specificato esiste e che è non statico "
domanda è come si dovrebbe creare fagiolo in questo tipo di situazione in primavera?
Ecco come ho risolto il problema Validator:
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
Il nome di classe è lì per dimostrare cosa volevo fare. Come ho detto "Quello che capisco è che in" metodo di fabbrica "è possibile accedere solo ai metodi statici definiti nella classe definita nel parametro" classe "." – Spaideri
Corretto: se si assegna il parametro 'class', il metodo factory deve essere un metodo statico di quella classe, come mostrato nella creazione di' validatorFactory'. –