applicationContext的第一个抽象类
来看看它具象了什么,抽象了什么
extends DefaultResourceLoader
直接继承了解析资源的能力
spring应用程序运行时扩展全部从配置资源而来
implements ConfigurableApplicationContext
implements DisposableBean
也是个Bean。先有鸡还是蛋?
具象
生命周期
active
closed
shutdownHook
destroy()<br>
void close()<br>
void start()
void stop()
boolean isRunning()
lifecycleProcessor<br>
可配置性
id
parent<br>
environment<br>
ConfigurableEnvironment
resourcePatternResolver<br>
beanFactoryPostProcessors
publishEvent
applicationEventMulticaster<br>
applicationListeners<br>
earlyApplicationEvents
refresh()
refresh的大部分方法都用了pretected访问级别
标准的模板方法模式,同时支持子类扩展
基本定义了一个applicationContext加载过程
获取一个beanFactory
配置这个beanFactory
执行非延迟加载单例bean
Object getBean(String name)<br>
<T> T getBean(String name, Class<T> requiredType)
<T> T getBean(Class<T> requiredType)
boolean containsBean(String name)
boolean isSingleton(String name)
boolean isPrototype(String name)
...
boolean containsBeanDefinition(String beanName)<br>
int getBeanDefinitionCount()
String[] getBeanDefinitionNames()
String[] getBeanNamesForType(ResolvableType type)
String[] getBeanNamesForAnnotation(Class<? extends Annotation> annotationType)
Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType)
<A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType)
抽象
abstract void refreshBeanFactory()
abstract void closeBeanFactory()
abstract ConfigurableListableBeanFactory getBeanFactory()
可扩展
createEnvironment()
prepareRefresh()<br>
initPropertySources()<br>
ConfigurableListableBeanFactory obtainFreshBeanFactory()
void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory)
beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));
引出问题:现在beanFactory有了,在做些注入准备。现在有bean了没有?有什么?
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
子类注入BeanDefinition
invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory)<br>
加工BeanDefinition
void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory)
注入Bean处理器
bean肯定还没加载
void initMessageSource()
void initApplicationEventMulticaster()
初始化事件广播器
void initLifecycleProcessor()<br>
void registerListeners()<br>
注入事件监听器
void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory)<br>
这里就有no lazy bean加载的过程
beanFactory.preInstantiateSingletons();
其实是委托给内部那个beanFactory来实现的
void finishRefresh()<br>
只做了几个生命周期事件处理和事件发布
void doClose()<br>
void destroyBeans()<br>