SpringBoot启动过程源码中所运用的设计模式
Spring Boot 的启动过程源码中广泛运用了多种设计模式,这些模式不仅提升了代码的灵活性和扩展性,还确保了框架的高效运行。以下是结合源码的详细分析:
1. 模板方法模式(Template Method)
应用场景:Spring 容器初始化的核心流程。
源码示例:AbstractApplicationContext
的 refresh()
方法定义了容器刷新的骨架(如 prepareRefresh()
、obtainFreshBeanFactory()
、onRefresh()
等步骤),但具体实现由子类完成。例如:
AnnotationConfigServletWebServerApplicationContext
重写onRefresh()
方法启动内嵌 Web 服务器。
关键代码:
public void refresh() {
prepareRefresh();
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
prepareBeanFactory(beanFactory);
postProcessBeanFactory(beanFactory); // 空方法,子类实现
invokeBeanFactoryPostProcessors(beanFactory);
// ... 其他步骤
}
2. 单例模式(Singleton)
应用场景:Spring Bean 的默认作用域。
源码示例:通过 ConcurrentHashMap
存储单例 Bean,使用双重检查锁(DCL)确保线程安全。AbstractBeanFactory
的 getSingleton()
方法实现如下:
protected Object getSingleton(String beanName, boolean allowEarlyReference) {
Object singletonObject =