springboot源码中使用了哪些设计模式?

209 阅读1分钟

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