Я пытался создать компонент Hibernate Validator и столкнулся с этой проблемой, создавая компонент из статического метода фабрики в другом классе.Я нашел способ Spring для инициализации моего бина Validator (решение внизу), но сама проблема остается нерешенной.В качестве примера в данном случае используется Validator.
Так я создаю экземпляр 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" />
Насколько я понимаю, в «фабричном методе» вы можете получить доступ только к статическим методам, определенным в классе, определенном в параметре «класс».Так как метод buildDefaultValidatorFactory () является статическим, я не могу создать экземпляр Validation и передать его как «фабричный бин» для 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"/>