@Bean的加载流程
再执行SpringApplication对象的run方法时 执行 refreshContext方法
会执行 ConfigurationClassPostProcessor类的 postProcessBeanDefinitionRegistry方法
ConfigurationClassParser#retrieveBeanMethodMetadata(sourceClass)方法会拿到当前类中所有加了@Bean注解的方法
再把上面拿到的所有@Bean注解的方法 放到ConfigurationClass对象的beanMethods属性里
把方法放到beanMethods里之后 执行ConfigurationClassPostProcessor#processConfigBeanDefinitions方法中的this.reader.loadBeanDefinitions(configClasses);把configClass对象加载到beanDefinitionMap中
从上面放到ConfigurationClass对象的beanMethods属性里 取出所有的beanMeathod方法 进行循环遍历
执行ConfigurationClassBeanDefinitionReader#loadBeanDefinitionsForBeanMethod方法 默认使用方法名作为beanDefinitionMap的key
如果@Bean注解中 给bean起了名字(@Bean(“123”)) beanDefinitionMap的key就使用起的名字(123)
最后调用ConfigurationClassBeanDefinitionReader#loadBeanDefinitionsForBeanMethod方法中的this.registry.registerBeanDefinition(beanName, beanDefToRegister); 把beanMethod 注入到beanDefinitionMap中