@EnableAspectJAutoProxy의 봄 5.x의 소스 여행 마흔둘 AOP

EnableAspectJAutoProxy 코멘트 무슨 짓을

이 주석은 그는 정말 오픈 내부의 주요 특성 아니다,는 AOP 프록시를 열 수있는 열쇠입니다 proxyTargetClass하지만 중 하나를 사용하기로 결정 수 CGLIB를. 실제 의사 결정 캔 프록시입니다 AspectJAutoProxyRegistrar.class.
그림 삽입 설명 여기

AspectJAutoProxyRegistrar 대행 등록

그는입니다 ImportBeanDefinitionRegistrar우리가 이전에 이야기 한 확장, 당신은 가입 할 수 있습니다 bean정의.

class AspectJAutoProxyRegistrar implements ImportBeanDefinitionRegistrar {

	/**
	 * Register, escalate, and configure the AspectJ auto proxy creator based on the value
	 * of the @{@link EnableAspectJAutoProxy#proxyTargetClass()} attribute on the importing
	 * {@code @Configuration} class.
	 */
	@Override
	public void registerBeanDefinitions(
			AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

		AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry);

		AnnotationAttributes enableAspectJAutoProxy =
				AnnotationConfigUtils.attributesFor(importingClassMetadata, EnableAspectJAutoProxy.class);
		if (enableAspectJAutoProxy != null) {
			if (enableAspectJAutoProxy.getBoolean("proxyTargetClass")) {
				AopConfigUtils.forceAutoProxyCreatorToUseClassProxying(registry);
			}
			if (enableAspectJAutoProxy.getBoolean("exposeProxy")) {
				AopConfigUtils.forceAutoProxyCreatorToExposeProxy(registry);
			}
		}
	}

}

앞에 실제로 그것으로 등록 어떤 시간, 또한 클래스 구성 구문 분석, 검증 후 한 말 bean우리가 큰 다시 살펴보고, 정의에로드 할 때 등록.

구성 클래스

내 구성 클래스 :

@Configuration
@EnableAspectJAutoProxy
public class MyConfig {

}

해상도 설정 클래스

ConfigurationClassPostProcessorprocessConfigBeanDefinitions방법. 중간 : 먼저 설명 될 것이며, 부모의 의견 음의 값은 완전히로드 된 와서 : 그래서 넣어 알아. 그런 다음 에 대한 치료의 유형입니다. 그런 다음 인스턴스, 다음에 위치 로드 할 준비가 뒤에 시간으로 정의했다.
그림 삽입 설명 여기
ConfigurationClassParserdoProcessConfigurationClass
그림 삽입 설명 여기
getImportsImport
그림 삽입 설명 여기
그림 삽입 설명 여기
AspectJAutoProxyRegistrar
그림 삽입 설명 여기
processImportsImportBeanDefinitionRegistrar
그림 삽입 설명 여기
ConfigurationClassimportBeanDefinitionRegistrarsbean

로드 빈 정의

ConfigurationClassBeanDefinitionReaderloadBeanDefinitionsForConfigurationClass마지막 줄 :
그림 삽입 설명 여기
호출하는 것입니다 방법 :ImportBeanDefinitionRegistrarregisterBeanDefinitions
그림 삽입 설명 여기

registerBeanDefinitions

사실, 우리는 생성 정의를 한 다음 속성을 설정합니다.AnnotationAwareAspectJAutoProxyCreatorbean

@Override
	public void registerBeanDefinitions(
			AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

		AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry);

		AnnotationAttributes enableAspectJAutoProxy =
				AnnotationConfigUtils.attributesFor(importingClassMetadata, EnableAspectJAutoProxy.class);
		if (enableAspectJAutoProxy != null) {
			if (enableAspectJAutoProxy.getBoolean("proxyTargetClass")) {
				AopConfigUtils.forceAutoProxyCreatorToUseClassProxying(registry);
			}
			if (enableAspectJAutoProxy.getBoolean("exposeProxy")) {
				AopConfigUtils.forceAutoProxyCreatorToExposeProxy(registry);
			}
		}
	}

그것은 빈 정의 및 등록 내부를 만드는 것입니다 :
그림 삽입 설명 여기
그림 삽입 설명 여기
다음 시간이 말해 AnnotationAwareAspectJAutoProxyCreator그것이 무엇인지.

음, 오늘, 우리는 단지 자신의 학습, 제한 용량 이해를 참조하십시오 위대한 하나님을 뿌리지 마십시오 도움이 연구에 희망과 이해, 용서하십시오.

게시 된 235 개 원래 기사 · 원 찬양 74 ·은 30000 +를 볼

추천

출처blog.csdn.net/wangwei19871103/article/details/105184755