Skip to content

Latest commit

 

History

History
131 lines (111 loc) · 4 KB

Spring-BeanDefinitionReaderUtils.md

File metadata and controls

131 lines (111 loc) · 4 KB

Spring BeanDefinitionReaderUtils

createBeanDefinition

  • org.springframework.beans.factory.support.BeanDefinitionReaderUtils.createBeanDefinition
publicstaticAbstractBeanDefinitioncreateBeanDefinition( @NullableStringparentName, @NullableStringclassName, @NullableClassLoaderclassLoader) throwsClassNotFoundException { GenericBeanDefinitionbd = newGenericBeanDefinition(); // 设置 父beanbd.setParentName(parentName); if (className != null) { if (classLoader != null) { // 设置 class// 内部是通过反射创建 classbd.setBeanClass(ClassUtils.forName(className, classLoader)); } else { // 设置 class namebd.setBeanClassName(className); } } returnbd; }

generateBeanName

  • org.springframework.beans.factory.support.BeanDefinitionReaderUtils.generateBeanName(org.springframework.beans.factory.config.BeanDefinition, org.springframework.beans.factory.support.BeanDefinitionRegistry, boolean)
publicstaticStringgenerateBeanName( BeanDefinitiondefinition, BeanDefinitionRegistryregistry, booleanisInnerBean) throwsBeanDefinitionStoreException { // 获取 bean class 的名称// Class.getName()StringgeneratedBeanName = definition.getBeanClassName(); if (generatedBeanName == null) { // 父类名称是否存在if (definition.getParentName() != null) { generatedBeanName = definition.getParentName() + "$child"; } // 工厂 beanName 是否为空elseif (definition.getFactoryBeanName() != null) { generatedBeanName = definition.getFactoryBeanName() + "$created"; } } if (!StringUtils.hasText(generatedBeanName)) { thrownewBeanDefinitionStoreException("Unnamed bean definition specifies neither " + "'class' nor 'parent' nor 'factory-bean' - can't generate bean name"); } Stringid = generatedBeanName; if (isInnerBean) { // Inner bean: generate identity hashcode suffix.// 组装名称// 生成名称 + # + 16 进制的一个字符串id = generatedBeanName + GENERATED_BEAN_NAME_SEPARATOR + ObjectUtils.getIdentityHexString(definition); } else { // Top-level bean: use plain class name with unique suffix if necessary.// 唯一beanName设置// // beanName + # + 序号returnuniqueBeanName(generatedBeanName, registry); } returnid; }

uniqueBeanName

publicstaticStringuniqueBeanName(StringbeanName, BeanDefinitionRegistryregistry) { Stringid = beanName; intcounter = -1; // Increase counter until the id is unique.while (counter == -1 || registry.containsBeanDefinition(id)) { counter++; // beanName + # + 序号id = beanName + GENERATED_BEAN_NAME_SEPARATOR + counter; } returnid; }

registerBeanDefinition

publicstaticvoidregisterBeanDefinition( BeanDefinitionHolderdefinitionHolder, BeanDefinitionRegistryregistry) throwsBeanDefinitionStoreException { // Register bean definition under primary name.// 获取 beanNameStringbeanName = definitionHolder.getBeanName(); // 注册bean definitionregistry.registerBeanDefinition(beanName, definitionHolder.getBeanDefinition()); // Register aliases for bean name, if any.// 别名列表String[] aliases = definitionHolder.getAliases(); // 注册别名列表if (aliases != null) { for (Stringalias : aliases) { registry.registerAlias(beanName, alias); } } }

registerWithGeneratedName

publicstaticStringregisterWithGeneratedName( AbstractBeanDefinitiondefinition, BeanDefinitionRegistryregistry) throwsBeanDefinitionStoreException { // 生成一个 beanNameStringgeneratedName = generateBeanName(definition, registry, false); // 注册 bean Definitionregistry.registerBeanDefinition(generatedName, definition); returngeneratedName; }
close