@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 {
}
해상도 설정 클래스
ConfigurationClassPostProcessor
processConfigBeanDefinitions
방법. 중간 : 먼저 설명 될 것이며, 부모의 의견 음의 값은 완전히로드 된 와서 : 그래서 넣어 알아. 그런 다음 에 대한 치료의 유형입니다. 그런 다음 인스턴스, 다음에 위치 에 로드 할 준비가 뒤에 시간으로 정의했다.
ConfigurationClassParser
doProcessConfigurationClass
getImports
Import
AspectJAutoProxyRegistrar
processImports
ImportBeanDefinitionRegistrar
ConfigurationClass
importBeanDefinitionRegistrars
bean
로드 빈 정의
ConfigurationClassBeanDefinitionReader
loadBeanDefinitionsForConfigurationClass
마지막 줄 :
호출하는 것입니다 방법 :ImportBeanDefinitionRegistrar
registerBeanDefinitions
registerBeanDefinitions
사실, 우리는 생성 정의를 한 다음 속성을 설정합니다.AnnotationAwareAspectJAutoProxyCreator
bean
@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
그것이 무엇인지.
음, 오늘, 우리는 단지 자신의 학습, 제한 용량 이해를 참조하십시오 위대한 하나님을 뿌리지 마십시오 도움이 연구에 희망과 이해, 용서하십시오.