Class LocalValidatorFactoryBean

java.lang.Object
org.springframework.validation.beanvalidation.SpringValidatorAdapter
org.springframework.validation.beanvalidation.LocalValidatorFactoryBean
All Implemented Interfaces:
Validator, ValidatorFactory, AutoCloseable, Aware, DisposableBean, InitializingBean, ApplicationContextAware, SmartValidator, Validator
Direct Known Subclasses:
OptionalValidatorFactoryBean

public class LocalValidatorFactoryBean extends SpringValidatorAdapter implements ValidatorFactory, ApplicationContextAware, InitializingBean, DisposableBean
This is the central class for jakarta.validation (JSR-303) setup in a Spring application context: It bootstraps a jakarta.validation.ValidationFactory and exposes it through the Spring Validator interface as well as through the JSR-303 Validator interface and the ValidatorFactory interface itself.

When talking to an instance of this bean through the Spring or JSR-303 Validator interfaces, you'll be talking to the default Validator of the underlying ValidatorFactory. This is very convenient in that you don't have to perform yet another call on the factory, assuming that you will almost always use the default Validator anyway. This can also be injected directly into any target dependency of type Validator!

This class is also being used by Spring's MVC configuration namespace, in case of the jakarta.validation API being present but no explicit Validator having been configured.

Since:
3.0
Author:
Juergen Hoeller, Sebastien Deleuze
See Also:
  • Constructor Details

    • LocalValidatorFactoryBean

      public LocalValidatorFactoryBean()
  • Method Details

    • setProviderClass

      public void setProviderClass(Class providerClass)
      Specify the desired provider class, if any.

      If not specified, JSR-303's default search mechanism will be used.

      See Also:
    • setValidationProviderResolver

      public void setValidationProviderResolver(ValidationProviderResolver validationProviderResolver)
      Specify a JSR-303 ValidationProviderResolver for bootstrapping the provider of choice, as an alternative to META-INF driven resolution.
      Since:
      4.3
    • setMessageInterpolator

      public void setMessageInterpolator(MessageInterpolator messageInterpolator)
      Specify a custom MessageInterpolator to use for this ValidatorFactory and its exposed default Validator.
    • setValidationMessageSource

      public void setValidationMessageSource(MessageSource messageSource)
      Specify a custom Spring MessageSource for resolving validation messages, instead of relying on JSR-303's default "ValidationMessages.properties" bundle in the classpath. This may refer to a Spring context's shared "messageSource" bean, or to some special MessageSource setup for validation purposes only.

      NOTE: This feature requires Hibernate Validator 4.3 or higher on the classpath. You may nevertheless use a different validation provider but Hibernate Validator's ResourceBundleMessageInterpolator class must be accessible during configuration.

      Specify either this property or "messageInterpolator", not both. If you would like to build a custom MessageInterpolator, consider deriving from Hibernate Validator's ResourceBundleMessageInterpolator and passing in a Spring-based ResourceBundleLocator when constructing your interpolator.

      In order for Hibernate's default validation messages to be resolved still, your MessageSource must be configured for optional resolution (usually the default). In particular, the MessageSource instance specified here should not apply "useCodeAsDefaultMessage" behavior. Please double-check your setup accordingly.

      See Also:
      • ResourceBundleMessageInterpolator
    • setTraversableResolver

      public void setTraversableResolver(TraversableResolver traversableResolver)
      Specify a custom TraversableResolver to use for this ValidatorFactory and its exposed default Validator.
    • setConstraintValidatorFactory

      public void setConstraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory)
      Specify a custom ConstraintValidatorFactory to use for this ValidatorFactory.

      Default is a SpringConstraintValidatorFactory, delegating to the containing ApplicationContext for creating autowired ConstraintValidator instances.

    • setParameterNameDiscoverer

      public void setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)
      Set the ParameterNameDiscoverer to use for resolving method and constructor parameter names if needed for message interpolation.

      Default is Hibernate Validator's own internal use of standard Java reflection. This may be overridden with a custom subclass or a Spring-controlled DefaultParameterNameDiscoverer if necessary.

    • setMappingLocations

      public void setMappingLocations(Resource... mappingLocations)
      Specify resource locations to load XML constraint mapping files from, if any.
    • setValidationProperties

      public void setValidationProperties(Properties jpaProperties)
      Specify bean validation properties to be passed to the validation provider.

      Can be populated with a String "value" (parsed via PropertiesEditor) or a "props" element in XML bean definitions.

      See Also:
    • setValidationPropertyMap

      public void setValidationPropertyMap(@Nullable Map<String,String> validationProperties)
      Specify bean validation properties to be passed to the validation provider as a Map.

      Can be populated with a "map" or "props" element in XML bean definitions.

      See Also:
    • getValidationPropertyMap

      public Map<String,String> getValidationPropertyMap()
      Allow Map access to the bean validation properties to be passed to the validation provider, with the option to add or override specific entries.

      Useful for specifying entries directly, for example via "validationPropertyMap[myKey]".

    • setConfigurationInitializer

      public void setConfigurationInitializer(Consumer<Configuration<?>> configurationInitializer)
      Specify a callback for customizing the Bean Validation Configuration instance, as an alternative to overriding the postProcessConfiguration(Configuration) method in custom LocalValidatorFactoryBean subclasses.

      This enables convenient customizations for application purposes. Infrastructure extensions may keep overriding the postProcessConfiguration(jakarta.validation.Configuration<?>) template method.

      Since:
      5.3.19
    • setApplicationContext

      public void setApplicationContext(ApplicationContext applicationContext)
      Description copied from interface: ApplicationContextAware
      Set the ApplicationContext that this object runs in. Normally this call will be used to initialize the object.

      Invoked after population of normal bean properties but before an init callback such as InitializingBean.afterPropertiesSet() or a custom init-method. Invoked after ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader), ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher) and MessageSourceAware, if applicable.

      Specified by:
      setApplicationContext in interface ApplicationContextAware
      Parameters:
      applicationContext - the ApplicationContext object to be used by this object
      See Also:
    • afterPropertiesSet

      public void afterPropertiesSet()
      Description copied from interface: InitializingBean
      Invoked by the containing BeanFactory after it has set all bean properties and satisfied BeanFactoryAware, ApplicationContextAware etc.

      This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.

      Specified by:
      afterPropertiesSet in interface InitializingBean
    • postProcessConfiguration

      protected void postProcessConfiguration(Configuration<?> configuration)
      Post-process the given Bean Validation configuration, adding to or overriding any of its settings.

      Invoked right before building the ValidatorFactory.

      Parameters:
      configuration - the Configuration object, pre-populated with settings driven by LocalValidatorFactoryBean's properties
    • getValidator

      public Validator getValidator()
      Specified by:
      getValidator in interface ValidatorFactory
    • usingContext

      public ValidatorContext usingContext()
      Specified by:
      usingContext in interface ValidatorFactory
    • getMessageInterpolator

      public MessageInterpolator getMessageInterpolator()
      Specified by:
      getMessageInterpolator in interface ValidatorFactory
    • getTraversableResolver

      public TraversableResolver getTraversableResolver()
      Specified by:
      getTraversableResolver in interface ValidatorFactory
    • getConstraintValidatorFactory

      public ConstraintValidatorFactory getConstraintValidatorFactory()
      Specified by:
      getConstraintValidatorFactory in interface ValidatorFactory
    • getParameterNameProvider

      public ParameterNameProvider getParameterNameProvider()
      Specified by:
      getParameterNameProvider in interface ValidatorFactory
    • getClockProvider

      public ClockProvider getClockProvider()
      Specified by:
      getClockProvider in interface ValidatorFactory
    • unwrap

      public <T> T unwrap(@Nullable Class<T> type)
      Description copied from interface: SmartValidator
      Return a contained validator instance of the specified type, unwrapping as far as necessary.
      Specified by:
      unwrap in interface SmartValidator
      Specified by:
      unwrap in interface Validator
      Specified by:
      unwrap in interface ValidatorFactory
      Overrides:
      unwrap in class SpringValidatorAdapter
      Type Parameters:
      T - the type of the object to return
      Parameters:
      type - the class of the object to return
      Returns:
      a validator instance of the specified type; null if there isn't a nested validator; an exception may be raised if the specified validator type does not match.
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface ValidatorFactory
    • destroy

      public void destroy()
      Description copied from interface: DisposableBean
      Invoked by the containing BeanFactory on destruction of a bean.
      Specified by:
      destroy in interface DisposableBean