通过前面的分析,@Bean 注解的方法会 ConfigurationClassParser 的 parse 方法中添加到对应的配置类的 beanMethods 集合中。 @Bean 注解是用来代替之前 XML 配置 bean 对象,为了让容器管理 bean, 那么还需要将 @Bean 注解方法转化成合适的 BeanDenifition 注入到 BeanFactory 中才算是完成了对 @Bean 注解的解析。 @Bean 注解的处理流程如下:
- ConfigurationClassProcessor 的 processConfigBeanDefinitions 方法是用来解析配置的方法。其中会调用 ConfigurationClassParser 的 parse 方法解析配置类
- parse 方法中将 @Bean 注解的方法添加到配置类的 beanMethods 集合中
- 回到 processConfigBeanDefinitions 方法中,调用 ConfigurationClassBeanDefinitionReader 的 loadBeanDefinitions 方法,这个方法中会将所有 Bean method 注册到 beanfactory 中,还有 ImportResource 和 importBeanDefinitionRegistrar 中的类也会被处理。
- 构造 ConfigurationClassBeanDefinition, 配置类会作为一个工厂类, @Bean 方法作为工厂方法,之后通过工厂方法实例化对象
- 将 ConfigurationClassBeanDefinition 添加到 beanFactory
通过对 @Bean 以及之前那些注解的解析,可以将大部分类的 BeanDenifition 添加到 BeanFactory 中,等待之后的实例化和初始化。