Как остановить DefaultListableBeanFactory от неявного создания экземпляра LocalValidatorFactoryBean - PullRequest
0 голосов
/ 19 февраля 2012

Я использую Spring 3.1 и имею следующую конфигурацию Spring, где я явно создаю LocalValidatorFactoryBean, используя свой собственный ValidationMessageSource.У меня Hibernate Validator 4.1 в моем пути к классам.

<bean id="messageSource"
      class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>ValidatorMsgID</value>
        </list>
    </property>
</bean>

<bean id="validator"
      class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource" ref="messageSource"/>
</bean>

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>

Однако я заметил, что LocalValidatorFactoryBean создается дважды путем нажатия на отладку в классе afterPropertiesSet.Первый раз - для явного бина, который я определил в весеннем конфиге, однако после этого тот же класс снова неявно создается экземпляром класса DefaultListableBeanFactory - очевидно, на этот раз без validationMessageSource.Поэтому кажется, что когда Spring действительно использует LocalValidatorFactoryBean, он использует тот, который по умолчанию имеет Hibernates messagesource, а не тот, который я указал.кажется, что это вызвано mvc:annotation-driven У меня есть в весеннем конфиге.Любые указатели все равно помогут

1 Ответ

5 голосов
/ 20 февраля 2012

Хорошо, я в конечном итоге отсортировал его, добавив атрибут validator в "mvc: annotation-driven".Вот так выглядит мой последний весенний конфиг

<bean id="messageSource"
      class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>com.mycompany.msgs.ValidatorMsgID</value>
        </list>
    </property>
</bean>

<bean id="validator"
      class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="messageInterpolator">
        <bean class="org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator">
            <constructor-arg index="0">
                <bean class="org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator">
                    <constructor-arg index="0" ref="messageSource"/>
                </bean>
            </constructor-arg>
        </bean>
    </property>
</bean>

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor">
    <property name="validator" ref="validator"/>
</bean>

<mvc:annotation-driven validator="validator"/> 
...