Package org.springframework.validation.beanvalidation

# Class LocalValidatorFactoryBean

java.lang.Object
org.springframework.validation.beanvalidation.SpringValidatorAdapter
org.springframework.validation.beanvalidation.LocalValidatorFactoryBean

All Implemented Interfaces:
  `Validator`, `ValidatorFactory`, `AutoCloseable`, `org.springframework.beans.factory.Aware`, `org.springframework.beans.factory.DisposableBean`, `org.springframework.beans.factory.InitializingBean`, `ApplicationContextAware`, `SmartValidator`, `Validator`

Direct Known Subclasses:
  `OptionalValidatorFactoryBean`

public class LocalValidatorFactoryBean extends SpringValidatorAdapter implements ValidatorFactory, ApplicationContextAware, org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.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:
  - `ValidatorFactory`
  - `Validator`
  - `Validation.buildDefaultValidatorFactory()`
  - `ValidatorFactory.getValidator()`

## Constructor Summary

Constructors
Constructor
Description
`LocalValidatorFactoryBean()`

## Method Summary

Modifier and Type
Method
Description
`void`
`afterPropertiesSet()`
`void`
`close()`
`void`
`destroy()`
`ClockProvider`
`getClockProvider()`
`ConstraintValidatorFactory`
`getConstraintValidatorFactory()`
`MessageInterpolator`
`getMessageInterpolator()`
`ParameterNameProvider`
`getParameterNameProvider()`
`TraversableResolver`
`getTraversableResolver()`
`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.
`Validator`
`getValidator()`
`protected void`
`postProcessConfiguration(Configuration<?> configuration)`
Post-process the given Bean Validation configuration, adding to or overriding any of its settings.
`void`
`setApplicationContext(ApplicationContext applicationContext)`
Set the ApplicationContext that this object runs in.
`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.
`void`
`setConstraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory)`
Specify a custom ConstraintValidatorFactory to use for this ValidatorFactory.
`void`
`setMappingLocations(org.springframework.core.io.Resource... mappingLocations)`
Specify resource locations to load XML constraint mapping files from, if any.
`void`
`setMessageInterpolator(MessageInterpolator messageInterpolator)`
Specify a custom MessageInterpolator to use for this ValidatorFactory and its exposed default Validator.
`void`
`setParameterNameDiscoverer(org.springframework.core.ParameterNameDiscoverer parameterNameDiscoverer)`
Set the ParameterNameDiscoverer to use for resolving method and constructor parameter names if needed for message interpolation.
`void`
`setProviderClass(Class providerClass)`
Specify the desired provider class, if any.
`void`
`setTraversableResolver(TraversableResolver traversableResolver)`
Specify a custom TraversableResolver to use for this ValidatorFactory and its exposed default Validator.
`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.
`void`
`setValidationProperties(Properties jpaProperties)`
Specify bean validation properties to be passed to the validation provider.
`void`
`setValidationPropertyMap(Map<String,String> validationProperties)`
Specify bean validation properties to be passed to the validation provider as a Map.
`void`
`setValidationProviderResolver(ValidationProviderResolver validationProviderResolver)`
Specify a JSR-303 `ValidationProviderResolver` for bootstrapping the provider of choice, as an alternative to `META-INF` driven resolution.
`<T> T`
`unwrap(Class<T> type)`
Return a contained validator instance of the specified type, unwrapping as far as necessary.
`ValidatorContext`
`usingContext()`

### Methods inherited from class org.springframework.validation.beanvalidation.SpringValidatorAdapter

`determineErrorCode, determineField, forExecutables, getArgumentsForConstraint, getConstraintsForClass, getRejectedValue, getResolvableField, processConstraintViolations, requiresMessageFormat, supports, validate, validate, validate, validateProperty, validateValue, validateValue`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.springframework.validation.Validator

`validateObject`

## 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:
  - `Validation.byProvider(Class)`
  - `Validation.byDefaultProvider()`

### 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(org.springframework.core.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(org.springframework.core.io.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:
  - `Configuration.addProperty(String, String)`

### 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:
  - `Configuration.addProperty(String, String)`

### 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:
  - `BeanInitializationException`

### afterPropertiesSet

public void afterPropertiesSet()

Specified by:
  `afterPropertiesSet` in interface `org.springframework.beans.factory.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()

Specified by:
  `destroy` in interface `org.springframework.beans.factory.DisposableBean`