Spring源码解读 --- 通过注解加载bean

it2026-08-26  7

二、Spring 通过注解加载bean

1.加载注解标注的类。MainConfig是通过注解注册在IOC容器中。

ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);

2. 注册到BeanDefinitionRegistry。

后续对MainConfig的注册处理都是由AnnotatedBeanDefinitionReader类进行处理。最终注册到BeanDefinitionRegistry的实现类DefaultListableBeanFactory中。

​ 在doRegisterBean方法做四件事

​ 1)、将bean封装为AnnotatedGenvericBeanDefinition对象。

​ 2)、获取该bean的名称MainCofig。此时是将bean的全路径引入的,通过以点进行分割获取末尾的字符串就是bean的名称。

​ 3)、判断设置bena的作用域,采用代理模式进行判断设置,默认是Singlne单例。

​ 4)、注册DefaultListableBeanFactory容器中beanDefinitionMap和beanDefinitionNames,以beanName为key,封装的BeanDefinition对象为Value注册进beanDefinitionMap。将beanName放入beanDefinitionNames中。

3. 将DefaultListableBeanFactory中注册信息经过下面处理后放入到ConfigurableListableBeanFactory容器中。

this.postProcessBeanFactory(beanFactory); this.invokeBeanFactoryPostProcessors(beanFactory); this.registerBeanPostProcessors(beanFactory); this.initMessageSource(); this.initApplicationEventMulticaster(); this.onRefresh(); this.registerListeners(); this.finishBeanFactoryInitialization(beanFactory); this.finishRefresh();

总结 我们可以在下面阶段接入自己的业务逻辑

//可以在下面这几个阶段加入自己的业务逻辑。可以IOC容器中bean对象。 this.postProcessBeanFactory(beanFactory); this.invokeBeanFactoryPostProcessors(beanFactory); this.registerBeanPostProcessors(beanFactory);
最新回复(0)