Loading...
墨滴

beyondman5219

2021/12/10  阅读:97  主题:默认主题

Spring boot 中的简单工厂模式

Spring boot 中的简单工厂模式

Spring boot 在启动类中调用 SpringApplication.run(**.class) 入口函数时候会根据 WebApplicationType 的枚举类型,在函数式接口中使用 lambda 表达式在接口内部创建对应的 ApplicationContext 对象,这种使用方式显得极为简洁和优雅。

public class SpringApplication {
……省略若干代码
private ApplicationContextFactory applicationContextFactory = ApplicationContextFactory.DEFAULT;
protected ConfigurableApplicationContext createApplicationContext() {
  return this.applicationContextFactory.create(this.webApplicationType);
 }
  ……省略若干代码
}
@FunctionalInterface
public interface ApplicationContextFactory {

    ApplicationContextFactory DEFAULT = (webApplicationType) -> {
        try {
            switch (webApplicationType) {
                case SERVLET:
                    return new AnnotationConfigServletWebServerApplicationContext();
                case REACTIVE:
                    return new AnnotationConfigReactiveWebServerApplicationContext();
                default:
                    return new AnnotationConfigApplicationContext();
            }
        } catch (Exception ex) {
            throw new IllegalStateException("Unable create a default ApplicationContext instance, "
                    + "you may need a custom ApplicationContextFactory", ex);
        }
    };
    
    ConfigurableApplicationContext create(WebApplicationType webApplicationType);

}

在 Spring boot 项目中均是基于注解形式创建 ApplicationContext 实例,这也得益于 Spring boot 基于注解的自动装配功能。

beyondman5219

2021/12/10  阅读:97  主题:默认主题

作者介绍

beyondman5219