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