類名:AnnotatedBeanDefinitionReader
registerBean(java.lang.Class<?>, java.lang.String, java.lang.Class<? extends java.lang.annotation.Annotation>…)
public void registerBean(Class<?> annotatedClass, String name, Class<? extends Annotation>... qualifiers) {
AnnotatedGenericBeanDefinition abd = new AnnotatedGenericBeanDefinition(annotatedClass);
AnnotationMetadata metadata = abd.getMetadata();
//profile註解處理
if (metadata.isAnnotated(Profile.class.getName())) {
AnnotationAttributes profile = MetadataUtils.attributesFor(metadata, Profile.class);
if (!this.environment.acceptsProfiles(profile.getStringArray("value"))) {
return;
}
}
//對bean的scope註解和proxymode屬性進行處理
//https://blog.csdn.net/u013423085/article/details/82872533
ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(abd);
//將作用域添加到數據結構中
abd.setScope(scopeMetadata.getScopeName());
String beanName = name != null ? name : this.beanNameGenerator.generateBeanName(abd, this.registry);
//處理Primary、Lazy、DependsOn等註解;並添加進入數據結構中
AnnotationConfigUtils.processCommonDefinitionAnnotations(abd);
//處理qualifiers屬性
if (qualifiers != null) {
Class[] arr$ = qualifiers;
int len$ = qualifiers.length;
for(int i$ = 0; i$ < len$; ++i$) {
Class<? extends Annotation> qualifier = arr$[i$];
if (Primary.class.equals(qualifier)) {
abd.setPrimary(true);
} else if (Lazy.class.equals(qualifier)) {
abd.setLazyInit(true);
} else {
abd.addQualifier(new AutowireCandidateQualifier(qualifier));
}
}
}
//存放BeanDefinition的一種結構,多了beanName和aliases
//https://blog.csdn.net/qq924862077/article/details/73558848
BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(abd, beanName);
//如果scope屬性使用了proxymode,並且proxymode不是NO。涉及到把多實例bean注入到單例bean中的代理創建
definitionHolder = AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry);
//把definitionHolder註冊到registry,這個AnnotationConfigApplicationContext實現了registry接口,其實就是註冊到AnnotationConfigApplicationContext中;
BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, this.registry);
}