AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(Test.class)
類名:AnnotationConfigApplicationContext
public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {
this();
this.register(annotatedClasses);
this.refresh();
}
this()方法
1、先調用父類GenericApplicationContext的構造函數
public class AnnotationConfigApplicationContext extends GenericApplicationContext
類名:GenericApplicationContext
public GenericApplicationContext() {
this.refreshed = false;
//創建一個容器
this.beanFactory = new DefaultListableBeanFactory();
this.beanFactory.setAutowireCandidateResolver(new QualifierAnnotationAutowireCandidateResolver());
}
2、然後調用自己的構造函數
public AnnotationConfigApplicationContext() {
this.reader = new AnnotatedBeanDefinitionReader(this);
this.scanner = new ClassPathBeanDefinitionScanner(this);
}
方法調用鏈:
this.reader = new AnnotatedBeanDefinitionReader(this);
public AnnotatedBeanDefinitionReader(BeanDefinitionRegistry registry, Environment environment);
AnnotationConfigUtils.registerAnnotationConfigProcessors(BeanDefinitionRegistry registry);
//這個方法插入了internalConfigurationAnnotationProcessor、internalAutowiredAnnotationProcessor、internalRequiredAnnotationProcessor、internalCommonAnnotationProcessor、internalPersistenceAnnotationProcessor這五個Processor
AnnotationConfigUtils.registerAnnotationConfigProcessors(BeanDefinitionRegistry registry, Object source);
this.register(annotatedClasses);
調用鏈
this.register(annotatedClasses)
AnnotatedBeanDefinitionReader.register(annotatedClasses)
AnnotatedBeanDefinitionReader.registerBean(annotatedClass)
(spring源碼02——registerBean源碼解析)AnnotatedBeanDefinitionReader.registerBean(annotatedClass, (String)null, (Class[])null);
this.refresh();
spring源碼03——AbstractApplicationContext.refresh()