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容器中注册了用户配置类

三 refresh

传送

posted @   Bannirui  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示