spring 고 품질 시리즈 - IOC (3)
관건 은
ConfigurationClassBeanDefinitionReader
의 방법 loadBeanDefinitions
이 고 이 방법 은 ConfigurationClassPostProcessor
의 방법 processConfigBeanDefinitions
에서 구체 적 으로 다음 과 같다.private void loadBeanDefinitionsForConfigurationClass(ConfigurationClass configClass,
TrackedConditionEvaluator trackedConditionEvaluator) {
@conditional beanDefinition
if (trackedConditionEvaluator.shouldSkip(configClass)) {
String beanName = configClass.getBeanName();
if (StringUtils.hasLength(beanName) && this.registry.containsBeanDefinition(beanName)) {
this.registry.removeBeanDefinition(beanName);
}
@Import ImportBeanDefinitionRegistrar ImportSelector
this.importRegistry.removeImportingClass(configClass.getMetadata().getClassName());
return;
}
@Import bean ImportSelector bean
if (configClass.isImported()) {
registerBeanDefinitionForImportedConfigurationClass(configClass);
}
@Bean
for (BeanMethod beanMethod : configClass.getBeanMethods()) {
loadBeanDefinitionsForBeanMethod(beanMethod);
}
spring.xml @ImportSource
loadBeanDefinitionsFromImportedResources(configClass.getImportedResources());
@ImportBeanDefinitionRegistrar
loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars());
}
처리 @ Conditional
처리 @ bean
처리 @ ImportSource ---
spring.xml
처리 @ ImportBeanDefinitionRegistrar
호출 된 핵심 논 리 는 다음 과 같다.
public static void register(BeanDefinitionRegistry registry, String... packageNames) {
1. BEAN=AutoConfigurationPackages.class.getName()
// AutoConfigurationPackages , beanDefinition constructorArguments packageNames, bean
if (registry.containsBeanDefinition(BEAN)) {
BeanDefinition beanDefinition = registry.getBeanDefinition(BEAN);
ConstructorArgumentValues constructorArguments = beanDefinition
.getConstructorArgumentValues();
constructorArguments.addIndexedArgumentValue(0,
addBasePackages(constructorArguments, packageNames));
}
else {
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(BasePackages.class);
beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(0,
packageNames);
beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
registry.registerBeanDefinition(BEAN, beanDefinition);
}
}
1. @ configuration 이 어느 단계 에서 동적 프 록 시 2 를 시 작 했 는 지 의문 이다. property Source 를 어떻게 사용 하 는 지.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.