Sping学习---Spring容器初始化过程(二)

2.register(componentClasses); //注册配置类

-->org.springframework.context.annotation.AnnotatedBeanDefinitionReader#register  //可以传递多个配置类,所以此处循环注册bean

   -->org.springframework.context.annotation.AnnotatedBeanDefinitionReader#doRegisterBean

     -->org.springframework.context.annotation.AnnotatedBeanDefinitionReader#doRegisterBean,该方法源码如下:

	<T> void doRegisterBean(Class<T> beanClass, @Nullable Supplier<T> instanceSupplier, @Nullable String name,
			@Nullable Class<? extends Annotation>[] qualifiers, BeanDefinitionCustomizer... definitionCustomizers) {
		//将配置类转换为未注册的被注解的BeanDefinition
		AnnotatedGenericBeanDefinition abd = new AnnotatedGenericBeanDefinition(beanClass);
		if (this.conditionEvaluator.shouldSkip(abd.getMetadata())) {
			return;
		}

		abd.setInstanceSupplier(instanceSupplier);
		//获取scope属性。设置给beanDefinition
		ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(abd);
		abd.setScope(scopeMetadata.getScopeName());
		String beanName = (name != null ? name : this.beanNameGenerator.generateBeanName(abd, this.registry));
		//根据源数据设置 lazy Primary DependsOn Role Description
		AnnotationConfigUtils.processCommonDefinitionAnnotations(abd);
		if (qualifiers != null) {
			for (Class<? extends Annotation> qualifier : qualifiers) {
				if (Primary.class == qualifier) {
					abd.setPrimary(true);
				}
				else if (Lazy.class == qualifier) {
					abd.setLazyInit(true);
				}
				else {
					abd.addQualifier(new AutowireCandidateQualifier(qualifier));
				}
			}
		}
		for (BeanDefinitionCustomizer customizer : definitionCustomizers) {
			customizer.customize(abd);
		}

		BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(abd, beanName);
		
		//根据ScopedProxyMode属性的值,判断是否要创建一个代理的BeanDefinitionHolder???这个有点懵
		//不过此时值为NO,返回的仍为原来的值,暂时不考虑
		definitionHolder = AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry);
		
		//注册配置类
		BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, this.registry);
	}

          ->org.springframework.beans.factory.support.BeanDefinitionReaderUtils#registerBeanDefinition// 此处的注册过程同(一)中的注册方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值