spring-bean生命周期
AbstractApplicationContext.refresh()
-ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
--refreshBeanFactory();
---DefaultListableBeanFactory beanFactory = createBeanFactory();
返回的是DefaultListableBeanFactory
---loadBeanDefinitions(beanFactory);
--ConfigurableListableBeanFactory beanFactory = getBeanFactory();
-prepareBeanFactory(beanFactory);
-postProcessBeanFactory(beanFactory);
-invokeBeanFactoryPostProcessors(beanFactory);对BeanDefinition的操作,先处理配置类,对BeanFactory的操作。
-registerBeanPostProcessors(beanFactory);把实现了BeanPostProcessor接口的类实例化,并且加入到BeanFactory中
-initMessageSource();用来定义不同语言的消息体,国际化处理
-initApplicationEventMulticaster();初始化事件派发器
-onRefresh();
-registerListeners();
-finishBeanFactoryInitialization(beanFactory);创建所有非懒加载的单例类(并执行 BeanPostProcessors)
--getBean(weaverAwareName);
--beanFactory.preInstantiateSingletons();
---getBean(beanName);
----doGetBean(name, null, null, false);
-----Object sharedInstance = getSingleton(beanName);
------this.earlySingletonObjects.put(beanName, singletonObject);
-----bean = getObjectForBeanInstance(sharedInstance, name, beanName, null);
-----sharedInstance = getSingleton(beanName, () -> {
try {
return createBean(beanName, mbd, args)①;
}}
------ singletonObject = singletonFactory.getObject();
------ addSingleton(beanName, singletonObject);this.singletonObjects.put(beanName, singletonObject);
-------this.singletonObjects.put(beanName, singletonObject);
①creatBean
-Object bean = resolveBeforeInstantiation(beanName, mbdToUse);
--bean = applyBeanPostProcessorsBeforeInstantiation(targetType, beanName);
---Object result = ibp.postProcessBeforeInstantiation(beanClass, beanName);
----Object proxy = this.createProxy(beanClass, beanName, specificInterceptors, targetSource);
----this.createAopProxy().getProxy(classLoader);AOP
--bean = applyBeanPostProcessorsAfterInitialization(bean, beanName);
-Object beanInstance = doCreateBean(beanName, mbdToUse, args);
--instanceWrapper = createBeanInstance(beanName, mbd, args);
--applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);主要是处理 @PostConstruct、@Autowire、@Value、@Resource、@PreDestory 等这些注解
--addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean));
---this.singletonFactories.put(beanName, singletonFactory);
--populateBean(beanName, mbd, instanceWrapper);
--exposedObject = initializeBean(beanName, exposedObject, mbd); 若实现了 BeanNameAware、BeanClassLoaderAware、BeanFactoryAwareAware 等接口,则注入相关对象;遍历后置处理器,调用实现的 postProcessBeforeInitialization 方法
// 如果实现了 initialzingBean,调用实现的 afterPropertiesSet()
// 如果配置了 init-mothod,调用相应的 init 方法
// 遍历后置处理器,调用实现的 postProcessAfterInitialization 方法
---wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
---invokeInitMethods(beanName, wrappedBean, mbd);
---wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
浙公网安备 33010602011771号