Spring BootでSpring Validationの働き方


validationはjavaxで定義されている認証インターフェースのセットです.今、私たちがよく知っている実現はヒッバーナのvalidationです.
問題1、springbootでvalidationはどのように導入されましたか?
問題2、  スプリングの中でvalidationの検証はどうやって実現しますか?
//        bean     
@Configuration
@ConditionalOnClass(ExecutableValidator.class)
@ConditionalOnResource(resources = "classpath:META-INF/services/javax.validation.spi.ValidationProvider")
@Import(PrimaryDefaultValidatorPostProcessor.class)
public class ValidationAutoConfiguration {

 //    bean    ,     ServiceLoader   jar       classpath:META-INF/services/javax.validation.spi.ValidationProvider, 
//  hibernate validation  ,
//    messageInterpolatorFactory    ,        
	@Bean
	@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
	@ConditionalOnMissingBean(Validator.class)
	public static LocalValidatorFactoryBean defaultValidator() {
		LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
		MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();
		factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
		return factoryBean;
	}


//             ,
//   BeanPostProcessor#postProcessAfterInitialization
//       bean     annotation  (@Validated)   ,
//  AOP    ,           
	@Bean
	@ConditionalOnMissingBean
	public static MethodValidationPostProcessor methodValidationPostProcessor(Environment environment,
			@Lazy Validator validator) {
		MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
		boolean proxyTargetClass = environment.getProperty("spring.aop.proxy-target-class", Boolean.class, true);
		processor.setProxyTargetClass(proxyTargetClass);
		processor.setValidator(validator);
		return processor;
	}

}
問題2、私たちは具体的にはMethodValidation PostProcessorというbeanの重要なソースコードを見に来ました.
MethodValidation PostProcessorはInitializingBeanインターフェースを実現します.
	@Override
	public void afterPropertiesSet() {
/**     Aop  ,   Annotation  org.springframework.validation.annotation.Validated
*
*       :
 *   1》 this.classFilter = new AnnotationClassFilter(classAnnotationType, checkInherited); *@Validated     
*	2》	this.methodMatcher = MethodMatcher.TRUE;       
**/
		Pointcut pointcut = new AnnotationMatchingPointcut(this.validatedAnnotationType, true);
/**
             MethodValidationInterceptor         
**/
		this.advisor = new DefaultPointcutAdvisor(pointcut, createMethodValidationAdvice(this.validator));
	}

/**
	 * Create AOP advice for method validation purposes, to be applied
	 * with a pointcut for the specified 'validated' annotation.
	 * @param validator the JSR-303 Validator to delegate to
	 * @return the interceptor to use (typically, but not necessarily,
	 * a {@link MethodValidationInterceptor} or subclass thereof)
	 * @since 4.2
	 */
	protected Advice createMethodValidationAdvice(@Nullable Validator validator) {
		return (validator != null ? new MethodValidationInterceptor(validator) : new MethodValidationInterceptor());
	}

また、その親タイプのAbstractAdvisigBenPostProcessorがBeanPostProcessorインターフェースを実現しましたので、具体的な実現方法を見てみます.
@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) {
		return bean;
	}

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) {
		if (this.advisor == null || bean instanceof AopInfrastructureBean) {
			// Ignore AOP infrastructure such as scoped proxies.
			return bean;
		}

		if (bean instanceof Advised) {
			Advised advised = (Advised) bean;
			if (!advised.isFrozen() && isEligible(AopUtils.getTargetClass(bean))) {
				// Add our local Advisor to the existing proxy's Advisor chain...
				if (this.beforeExistingAdvisors) {
					advised.addAdvisor(0, this.advisor);
				}
				else {
					advised.addAdvisor(this.advisor);
				}
				return bean;
			}
		}

		if (isEligible(bean, beanName)) {
			ProxyFactory proxyFactory = prepareProxyFactory(bean, beanName);
			if (!proxyFactory.isProxyTargetClass()) {
				evaluateProxyInterfaces(bean.getClass(), proxyFactory);
			}
			proxyFactory.addAdvisor(this.advisor);
			customizeProxyFactory(proxyFactory);
			return proxyFactory.getProxy(getProxyClassLoader());
		}

		// No proxy needed.
		return bean;
	}
この方法はプロキシクラスを生成します.(容器内に構築されたbeanをスキャンし、プロキシクラスを生成します.)
はい、ここに書きます.もし間違いがあれば、コメントしてください.助けてください.