如果我有8小时的时间砍一棵树,我就会花费6小时磨利自己的斧子。”
——亚伯拉罕·林肯
public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {
this();
//本节分析的步骤
register(annotatedClasses);
refresh();
}
上一节结束了Spring容器创建过程的分析,本节就是容器的初始化工作register(annotatedClasses)。
@EnableAutoConfiguration
@ComponentScan("com.Hodey")
public class CaseApplication {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(CaseApplication.class);
GardenofEden garden = ctx.getBean(GardenofEden.class);
garden.sayHello();
}
}
容器的初始化需要用户提供一个配置类,容器会将配置类进行注册。这个类一般情况下,就是你的启动类。Spring是支持用户提供多个配置类进行注册的,这里我们仅注册了一个配置类CaseApplication.class。这样在做doRegisterBean的时候传参等同于doRegisterBean(AutoInject.class, null, null, null);进入doRegisterBean方法(BeanDefinitionCustomizer... definitionCustomizers是可选参数).
<T> void doRegisterBean(Class<T> annotatedClass, @Nullable Supplier<T> instanceSupplier, @Nullable String name,
@Nullable Class<? extends Annotation>[] qualifiers, BeanDefinitionCustomizer... definitionCustomizers) {
//1.将CaseApplication.class解析后成为一个注解类型的bd。
AnnotatedGenericBeanDefinition abd = new AnnotatedGenericBeanDefinition(annotatedClass);
if (this.conditionEvalua

本文详细探讨了Spring IoC容器的初始化过程,特别是register方法中的配置类注册。从磨砺斧子的林肯名言引入,分析了如何将配置类转化为BeanDefinition并进行注册。内容涵盖注解解析、作用域确定、通用注解处理、自定义注解解析,重点讲解了BeanDefinition的合法性检查、覆盖策略以及并发注册的处理。文章还预告了接下来将分析的bean实例化过程。
最低0.47元/天 解锁文章
1348

被折叠的 条评论
为什么被折叠?



