Spring源码-03-容器创建
Spring源码-03-容器创建
注解Bean方式
public class AnnotationCtxMain02 {
public static void main(String[] args) {
new AnnotationConfigApplicationContext(MyCfg02.class);
}
}
// AnnotationConfigApplicationContext.java
public AnnotationConfigApplicationContext(Class<?>... componentClasses) {
/**
* 完成容器的基础组件初始化
* - beanFactory
* - 实现是DefaultListableBeanFactory
* - reader
* - 注解Bean读取
* - BeanDefinition注入容器
* - scanner
* - 指定路径扫包
* - BeanDefinition注入容器
*/
this();
this.register(componentClasses); // Bean读取器读取注解Bean将类信息封装BeanDefinition注入容器 配置类
/**
* 到此为止完成了准备工作
* - 向IoC容器中注册了用于处理注解Bean这种场景下的后置处理器
* - 向IoC容器中注册了用户配置类
*
*
*/
super.refresh();
}
容器创建主要3个步骤
- 基础组件初始化
- 注入BeanDefinition
- refresh
一 基础组件
// AnnotationConfigApplicationContext.java
public AnnotationConfigApplicationContext() {
super();
StartupStep createAnnotatedBeanDefReader = this.getApplicationStartup().start("spring.context.annotated-bean-reader.create");
this.reader = new AnnotatedBeanDefinitionReader(this); // 注解Bean读取器
createAnnotatedBeanDefReader.end();
this.scanner = new ClassPathBeanDefinitionScanner(this); // 路径扫包器
}
// GenericApplicationContext.java
public GenericApplicationContext() {
super();
this.beanFactory = new DefaultListableBeanFactory();
}
// AbstractApplicationContext.java
public AbstractApplicationContext() {
this.resourcePatternResolver = getResourcePatternResolver();
}
也就是如图
二 注解Bean读取器
完成了2个工作
- 向IoC容器中注册了用于处理注解Bean这种场景下的后置处理器
- 向IoC容器中注册了用户配置类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?