Я пытался создать Hibernate Validator bean и столкнулся с этой проблемой, создав компонент из статического заводского метода в другом классе. Я нашел способ Spring, чтобы инициализировать мой компонент Validator (решение внизу), но сама проблема остается нерешенной. Валидатор используется в качестве примера.Инициализация Spring bean из статического метода из другого класса?
Это, как я создаю экземпляр Validator в Java
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" />
То, что я понимаю, что в «заводскую метод "вы можете получить доступ только к статическим методам, определенным в классе, определенном в параметре" class ". Так как метод buildDefaultValidatorFactory() является статическим, я не могу создать экземпляр Validation и дать его в качестве «фабрики-боба» для validatorFactory, как это:
<bean id="validation" class="javax.validation.Validation" />
<bean id="validatorFactory"
class="javax.validation.ValidatorFactory"
factory-bean="validation"
factory-method="buildDefaultValidatorFactory" />
Это заканчивается до сообщения об ошибке,
" Убедитесь, что метод с указанным именем существует и что нестатическая "
Вопрос в том, как вы бы создать компонент в такого рода ситуации, весной?
Это, как я решил проблему Validator:
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
Название класса, чтобы продемонстрировать, что я хотел сделать. Как я сказал, «я понимаю, что в« заводском методе »вы можете получить доступ только к статическим методам, определенным в классе, определенном в параметре« класс ». – Spaideri
Это правильно - если вы укажете параметр 'class', фабричный метод должен быть статическим методом этого класса, как это видно при создании' validatorFactory'. –