springboot源码中使用了哪些设计模式?
工厂模式
- 简单工厂模式,根据入参返回对应的实例,即beanFactory.getBean(beanName)
- 工厂方法模式,由工厂方法创建实例,即factoryBean.getObject()
单例模式/原型模式
通过@Scope将bean设置为singleton即单例,设置为prototype即原型。
观察者模式/发布订阅模式
将实现ApplicationListener接口的事件监听对象注册到事件监听广播多路器中,然后通过事件监听广播多路器触发指定事件,执行对应事件监听器对象的方法。
责任链模式
多个BeanPostProcessor循环对一个bean进行处理就是责任链模式。
策略模式
加载配置时yaml和properties有各自对应的解析器,然后根据类型不同选择对应的解析器进行解析。
模板模式
比较经典的就是AbstractApplicationContext的refresh方法,该方法中的执行步骤都是固定好的可继承重写的。
适配器模式
DisposableBeanAdapter会试图解析出对应bean的销毁方法如DisposableBean接口的destroy方法、@PreDestroy注解的方法,@Bean的destroyMethod属性指定的方法、AutoCloseable接口的close方法、自定义的close或者shutdown方法,然后销毁时经由适配器进行销毁。
委托者模式
在SpringBoot应用启动准备环境时会调用DelegatingApplicationContextInitializer的initialize,该类会委托其他应用上下文初始化器进行初始化。
包装模式
ContentCachingRequestWrapper包装HttpServletRequest后实现了缓存其请求内容的功能。
代理模式
AOP