正文
List
存储BeanFactoryPostProcessor接口,Spring提供的一个扩展点
AbstractApplicationContext
startupShutdownMonitor
Object
refresh方法和destory方法公用的一个监视器,避免两个方法同时执行
AbstractApplicationContext
shutdownHook
Thread
Spring提供的一个钩子,JVM停止执行时会运行Thread里面的方法
AbstractApplicationContext
resourcePatternResolver
ResourcePatternResolver
上下文使用的资源格式解析器
AbstractApplicationContext
lifecycleProcessor
LifecycleProcessor
用于管理Bean生命周期的生命周期处理器接口
AbstractApplicationContext
messageSource
MessageSource
用于实现国际化的一个接口
AbstractApplicationContext
applicationEventMulticaster
ApplicationEventMulticaster
Spring提供的事件管理机制中的事件多播器接口
AbstractApplicationContext
applicationListeners
Set
Spring提供的事件管理机制中的应用监听器
AbstractApplicationContext
ClassPathXmlApplicationContext构造函数
看下ClassPathXmlApplicationContext的构造函数:
从第二段代码看,总共就做了三件事:
1、super(parent)
没什么太大的作用,设置一下父级ApplicationContext,这里是null
2、setConfigLocations(configLocations)
代码就不贴了,一看就知道,里面做了两件事情:
(1)将指定的Spring配置文件的路径存储到本地
(2)解析Spring配置文件路径中的${PlaceHolder}占位符,替换为系统变量中PlaceHolder对应的Value值,System本身就自带一些系统变量比如class.path、os.name、user.dir等,也可以通过System.setProperty()方法设置自己需要的系统变量
3、refresh()
这个就是整个Spring Bean加载的核心了,它是ClassPathXmlApplicationContext的父类AbstractApplicationContext的一个方法,顾名思义,用于刷新整个Spring上下文信息,定义了整个Spring上下文加载的流程。