public class LocalValidatorFactoryBean extends SpringValidatorAdapter implements ValidatorFactory, ApplicationContextAware, InitializingBean, DisposableBean
javax.validation (JSR-303) setup in a Spring
application context: It bootstraps a javax.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!
As of Spring 5.0, this class requires Bean Validation 1.1+, with special support
for Hibernate Validator 5.x (see setValidationMessageSource(org.springframework.context.MessageSource)).
This class is also runtime-compatible with Bean Validation 2.0 and Hibernate Validator 6.0,
with one special note: If you'd like to call BV 2.0's getClockProvider() method,
obtain the native ValidatorFactory through #unwrap(ValidatorFactory.class)
and call the getClockProvider() method on the returned native reference there.
This class is also being used by Spring's MVC configuration namespace, in case of the
javax.validation API being present but no explicit Validator having been configured.
ValidatorFactory,
Validator,
Validation.buildDefaultValidatorFactory(),
ValidatorFactory.getValidator()| Constructor and Description |
|---|
LocalValidatorFactoryBean() |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet()
Invoked by the containing
BeanFactory after it has set all bean properties
and satisfied BeanFactoryAware, ApplicationContextAware etc. |
void |
close() |
void |
destroy()
Invoked by the containing
BeanFactory on destruction of a bean. |
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 |
setConstraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory)
Specify a custom ConstraintValidatorFactory to use for this ValidatorFactory.
|
void |
setMappingLocations(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(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) |
ValidatorContext |
usingContext() |
determineErrorCode, determineField, forExecutables, getArgumentsForConstraint, getConstraintsForClass, getRejectedValue, getResolvableField, processConstraintViolations, requiresMessageFormat, supports, validate, validate, validate, validateProperty, validateValue, validateValuepublic void setProviderClass(Class providerClass)
If not specified, JSR-303's default search mechanism will be used.
public void setValidationProviderResolver(ValidationProviderResolver validationProviderResolver)
ValidationProviderResolver for bootstrapping the
provider of choice, as an alternative to META-INF driven resolution.public void setMessageInterpolator(MessageInterpolator messageInterpolator)
public void setValidationMessageSource(MessageSource messageSource)
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.
ResourceBundleMessageInterpolatorpublic void setTraversableResolver(TraversableResolver traversableResolver)
public void setConstraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory)
Default is a SpringConstraintValidatorFactory, delegating to the
containing ApplicationContext for creating autowired ConstraintValidator instances.
public void setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)
Default is a DefaultParameterNameDiscoverer.
public void setMappingLocations(Resource... mappingLocations)
public void setValidationProperties(Properties jpaProperties)
Can be populated with a String "value" (parsed via PropertiesEditor) or a "props" element in XML bean definitions.
public void setValidationPropertyMap(@Nullable Map<String,String> validationProperties)
Can be populated with a "map" or "props" element in XML bean definitions.
public Map<String,String> getValidationPropertyMap()
Useful for specifying entries directly, for example via "validationPropertyMap[myKey]".
public void setApplicationContext(ApplicationContext applicationContext)
ApplicationContextAwareInvoked 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.
setApplicationContext in interface ApplicationContextAwareapplicationContext - the ApplicationContext object to be used by this objectBeanInitializationExceptionpublic void afterPropertiesSet()
InitializingBeanBeanFactory 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.
afterPropertiesSet in interface InitializingBeanprotected void postProcessConfiguration(Configuration<?> configuration)
Invoked right before building the ValidatorFactory.
configuration - the Configuration object, pre-populated with
settings driven by LocalValidatorFactoryBean's propertiespublic Validator getValidator()
getValidator in interface ValidatorFactorypublic ValidatorContext usingContext()
usingContext in interface ValidatorFactorypublic MessageInterpolator getMessageInterpolator()
getMessageInterpolator in interface ValidatorFactorypublic TraversableResolver getTraversableResolver()
getTraversableResolver in interface ValidatorFactorypublic ConstraintValidatorFactory getConstraintValidatorFactory()
getConstraintValidatorFactory in interface ValidatorFactorypublic ParameterNameProvider getParameterNameProvider()
getParameterNameProvider in interface ValidatorFactorypublic <T> T unwrap(@Nullable Class<T> type)
unwrap in interface Validatorunwrap in interface ValidatorFactoryunwrap in class SpringValidatorAdapterpublic void close()
close in interface ValidatorFactorypublic void destroy()
DisposableBeanBeanFactory on destruction of a bean.destroy in interface DisposableBean