Spring Boot

发布时间:2024年01月23日

Spring Boot 概述

Spring Boot是一个旨在简化Spring应用程序创建和配置的框架。通过提供大量的自动配置(starter),开发者可以轻松快速地启动和运行一个Spring应用程序。

SpringApplication类

所有的Spring Boot应用程序都是从SpringApplication类开始的。以下是SpringApplication类中启动过程的简化流程。

public class SpringApplication {

    private Set<Class<?>> primarySources;
    private ApplicationContextInitializer<?>[] initializers;
    private ApplicationListener<?>[] listeners;
    private boolean webEnvironment;
    
    // SpringApplication构造方法简化示例
    public SpringApplication(Class<?>... primarySources) {
        this.primarySources = new HashSet<>(Arrays.asList(primarySources));
        this.webEnvironment = deduceWebApplicationType();
        this.initializers = getSpringFactoriesInstances(ApplicationContextInitializer.class);
        this.listeners = getSpringFactoriesInstances(ApplicationListener.class);
    }
    
    // SpringApplication.run()简化示例
    public ConfigurableApplicationContext run(String... args) {
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
        ConfigurableApplicationContext context = null;
        Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList<>();
        
        configureHeadlessProperty();
        SpringApplicationRunListeners listeners = getRunListeners(args);
        listeners.starting();
        
        try {
            ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
            ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);
            configureIgnoreBeanInfoProperty();
            
            Banner printedBanner = printBanner(environment);
            
            context = createApplicationContext();
            exceptionReporters = getSpringFactoriesInstances(SpringBootExceptionReporter.class, 
                                                            new Class[] { ConfigurableApplicationContext.class }, 
                                                            context);
            prepareContext(context, environment, listeners, applicationArguments, printedBanner);
            refreshContext(context);
            afterRefresh(context, applicationArguments);
            stopWatch.stop();
            if (this.logStartupInfo) {
                new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), stopWatch);
            }
            listeners.started(context);
            callRunners(context, applicationArguments);
        }
        catch (Throwable ex) {
            handleRunFailure(context, ex, exceptionReporters, listeners);
            throw new IllegalStateException(ex);
        }
        
        try {
            listeners.running(context);
        }
        catch (Throwable ex) {
            handleRunFailure(context, ex, exceptionReporters, null);
            throw new IllegalStateException(ex);
        }
        return context;
    }
    
    // 其他方法省略
}

在上述代码中,SpringApplication类负责启动Spring应用程序,包括初始化上下文、环境以及执行后处理器。

自动配置

自动配置是Spring Boot的一大特色。通过在spring.factories中列出的配置类,Spring Boot可以自动配置类路径下的jar包和beans。

条件注解

Spring Boot的自动配置通过一系列条件注解来实现,这些注解包括@ConditionalOnClass@ConditionalOnMissingBean@ConditionalOnProperty等。通过这些注解,Spring Boot在运行时动态地决定是否应该应用特定的配置。

内嵌Web服务器配置

Spring Boot自动配置了内嵌的Web服务器,如Tomcat、Jetty或Undertow。这是通过EmbeddedServletContainerAutoConfiguration类实现的。

数据库和JPA自动配置

Spring Boot通过DataSourceAutoConfigurationJpaRepositoriesAutoConfiguration自动配置类简化了数据源和JPA仓库的配置过程。

安全配置

对于安全性配置,Spring Boot提供了SecurityAutoConfiguration类来自动配置Spring Security。

属性绑定

@ConfigurationProperties注解允许将外部配置文件中的属性绑定到bean的字段上。

Spring Boot Starters

Spring Boot的starters提供了一种快速集成不同技术的方式,比如spring-boot-starter-web用于Web应用。

深入源码的方法

要全面理解Spring Boot的工作原理,建议逐步深入其源码,特别是SpringApplicationSpringFactoriesLoader的实现,以及特定的自动配置类的实现。

通过将Spring Boot项目导入IDE并结合断点调试器一步步跟踪代码的执行,开发者可以对Spring Boot的工作原理有更深层次的理解。

文章来源:https://blog.csdn.net/qq_43012298/article/details/135694805
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。