Commit 1fe84225 authored by Andy Wilkinson's avatar Andy Wilkinson

Merge branch '1.5.x'

parents 2f835cf4 5198fe88
...@@ -28,6 +28,7 @@ import org.springframework.boot.validation.MessageInterpolatorFactory; ...@@ -28,6 +28,7 @@ import org.springframework.boot.validation.MessageInterpolatorFactory;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Role; import org.springframework.context.annotation.Role;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
...@@ -60,7 +61,7 @@ public class ValidationAutoConfiguration { ...@@ -60,7 +61,7 @@ public class ValidationAutoConfiguration {
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public static MethodValidationPostProcessor methodValidationPostProcessor( public static MethodValidationPostProcessor methodValidationPostProcessor(
Environment environment, Validator validator) { Environment environment, @Lazy Validator validator) {
MethodValidationPostProcessor processor = new MethodValidationPostProcessor(); MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
boolean proxyTargetClass = environment boolean proxyTargetClass = environment
.getProperty("spring.aop.proxy-target-class", Boolean.class, true); .getProperty("spring.aop.proxy-target-class", Boolean.class, true);
......
...@@ -16,6 +16,9 @@ ...@@ -16,6 +16,9 @@
package org.springframework.boot.autoconfigure.validation; package org.springframework.boot.autoconfigure.validation;
import java.util.HashSet;
import java.util.Set;
import javax.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
import javax.validation.Validator; import javax.validation.Validator;
import javax.validation.constraints.Min; import javax.validation.constraints.Min;
...@@ -27,12 +30,15 @@ import org.junit.Test; ...@@ -27,12 +30,15 @@ import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.autoconfigure.validation.ValidationAutoConfigurationTests.CustomValidatorConfiguration.TestBeanPostProcessor;
import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.validation.beanvalidation.CustomValidatorBean;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean; import org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean;
...@@ -198,6 +204,13 @@ public class ValidationAutoConfigurationTests { ...@@ -198,6 +204,13 @@ public class ValidationAutoConfigurationTests {
.getPropertyValue("validator")); .getPropertyValue("validator"));
} }
@Test
public void methodValidationPostProcessorValidatorDependencyDoesNotTriggerEarlyInitialization() {
load(CustomValidatorConfiguration.class);
assertThat(this.context.getBean(TestBeanPostProcessor.class).postProcessed)
.contains("someService");
}
private boolean isPrimaryBean(String beanName) { private boolean isPrimaryBean(String beanName) {
return this.context.getBeanDefinition(beanName).isPrimary(); return this.context.getBeanDefinition(beanName).isPrimary();
} }
...@@ -322,4 +335,53 @@ public class ValidationAutoConfigurationTests { ...@@ -322,4 +335,53 @@ public class ValidationAutoConfigurationTests {
} }
@Configuration
static class CustomValidatorConfiguration {
CustomValidatorConfiguration(SomeService someService) {
}
@Bean
Validator customValidator() {
return new CustomValidatorBean();
}
@Bean
static TestBeanPostProcessor testBeanPostProcessor() {
return new TestBeanPostProcessor();
}
@Configuration
static class SomeServiceConfiguration {
@Bean
public SomeService someService() {
return new SomeService();
}
}
static class SomeService {
}
static class TestBeanPostProcessor implements BeanPostProcessor {
private Set<String> postProcessed = new HashSet<String>();
@Override
public Object postProcessAfterInitialization(Object bean, String name) {
this.postProcessed.add(name);
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String name) {
return bean;
}
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment