spring启动流程探索一、register(componentClasses);

本文探讨了Spring启动流程,重点分析了`register(componentClasses)`方法。从`AnnotationConfigApplicationContext`开始,深入到`AnnotatedGenericBeanDefinition`的创建,解析bean类的注解并进行初步处理。`resolveScopeMetadata`和`applyScopedProxyMode`方法完成了对bean作用域和代理模式的判断。`register(componentClasses)`主要任务是读取配置类上的注解并准备初始化工作。后续文章将详细讲解关键的`refresh()`方法。
摘要由CSDN通过智能技术生成

spring启动流程

spring用了很多年了,也会偶尔去看下,或者说去研究下spring源码,看spring源码确实让我在工作开发中有了很大的便易。但是从来没系统的去探究spring完整的一个启动流程,从这几天开始我就开始一步一步的去整理下spring的启动流程。

开始

要探究spring,实现得显式的去启动他了。我这里就只做了一个简单的测试:

		// 实例化bean 过程
		AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(ConfigUtils.class);
Object b = annotationConfigApplicationContext.getBean("b");

然后大家启动debug就可以开始我们的spring探索之路了。

AnnotationConfigApplicationContext(Class<?>… componentClasses)

	public AnnotationConfigApplicationContext(Class<?>... componentClasses) {
   
		//1.实例化AnnotationConfigApplicationContext 并初始化reader(
		// AnnotatedBeanDefinitionReader)和scanner(ClassPathBeanDefinitionScanner)
		// 实例化GenericApplicationContext->extends->AbstractApplicationContext->DefaultResourceLoader
		//								 ->调用DefaultListableBeanFactory->extends->AbstractAutowireCapableBeanFactory->
		//								 extends->AbstractBeanFactory->extends

		this();

		register(componentClasses);
 		refresh();
	}

大家可以看到第一个进来的就是AnnotationConfigApplicationContext(我是通过注解的方式加载spring的 )
里面主要有个三个方法第一个this(); 这个方法我们在这里不去细细研究他,只把他一笔带过,大家只需要知道,this()的时候他主要做了两个个工作。
1.初始化了reader和scanner
2.初始化了DefaultListableBeanFactory(这个就是我们所称的bean工厂了)
接下来需要研究的就是register(componentClasses); 这个方法了

register(componentClasses);

@Override
	public void register(Class<?>... componentClasses) {
   
		Assert.notEmpty(componentClasses, "At least one component class must be specified");
		this.reader.register(componentClasses);
	}

首先我们要看注释 Register one or more component classes to be processed.(注册一个或者多个要处理的组件),已经大概上说明了这个方法的作用。然后我们接着他的调用链往下。

	public void register(Class<?>... componentClasses) {
   
		for (Class<?> componentClass : componentClasses) {
   
			registerBean(componentClass);
		}
	}
public void registerBean(Class<?> beanClass) {
   
		doRegisterBean(beanClass, null, null, null, null);
	}
private <T> void doRegisterBean(Class<T> beanClass, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值