2012-02-19 1 views
0

저는 Spring 3.1을 사용하고 있고 명시 적으로 LocalValidatorFactoryBean을 사용하여 다음 코드를 작성했습니다. ValidationMessageSource. 나는 내 클래스 경로에 Hibernate Validator 4.1을 가지고있다. DefaultListableBeanFactory가 암시 적으로 LocalValidatorFactoryBean 인스턴스를 생성하는 것을 막는 방법

<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 방법을 쳐서 두 번 생성되는 것으로 나타났습니다. 처음으로 explicite bean에 대한 것은 봄 설정에서 정의했다. 그러나 동일한 클래스가 DefaultListableBeanFactory 클래스에 의해 암시 적으로 다시 인스턴스화되었다는 것을 알았다. 분명히 이번에는 validationMessageSource이 없었다. 그러므로 Spring이 LocalValidatorFactoryBean을 사용할 때 내가 지정한 것보다는 기본 최대 절전 모드 messagesource을 사용하는 것으로 보인다.

이보기가 조금 더 나아진 것은 이것이 mvc:annotation-driven에 의해 발생하는 것 같습니다. 모든 포인터가 여전히 도움이 될 것입니다.

답변

5

좋아요. 결국 "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"/>