Spring Boot启动原理

Spring Boot的自动配置为我们提供了快捷方便的方式来运行Spring应用,但很多开发者对其内部启动原理还不是很明白。这篇博客旨在解开Spring Boot的神秘面纱,帮助大家理解它的启动原理。

入口类和注解

我们的Spring Boot应用通常从一个主类开始,这个类包含一个main方法,以及一些注解:


@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

@SpringBootApplication注解和SpringApplication.run方法是启动应用的关键。下面我们来详细解读。

@SpringBootApplication背后的秘密

@SpringBootApplication是一个复合注解,包含了许多其他注解:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) 
})
public @interface SpringBootApplication {
...
}

其中,最重要的三个注解是@Configuration@EnableAutoConfiguration@ComponentScan

@Configuration

@Configuration是JavaConfig的标志,表示这个类是一个配置类。与XML配置相比,JavaConfig提供了一种类型安全的配置方式。

例如,下面的XML配置:

<bean id="mockService" class="..MockServiceImpl">...
</bean>

可以替换为如下的JavaConfig配置:

@Configuration
public class MockConfiguration{@Beanpublic MockService mockService(){return new MockServiceImpl();}
}

@ComponentScan

@ComponentScan注解告诉Spring在哪些地方寻找组件和配置。如果不设置basePackages属性,Spring将从声明@ComponentScan的类所在的包开始扫描。

@EnableAutoConfiguration

@EnableAutoConfiguration注解让Spring Boot根据应用所声明的依赖来对Spring框架进行自动配置。它是通过@Import注解实现的,导入了一个类EnableAutoConfigurationImportSelector,它会读取META-INF/spring.factories文件,获取所有的自动配置类,然后将符合条件的配置类加载到IoC容器中。

启动流程

  1. 调用SpringApplication.run方法,创建SpringApplication对象。

  2. 调用SpringApplicationrun方法,开始执行真正的启动流程。

  3. 创建ApplicationContext,这是Spring应用的上下文。

  4. 执行ApplicationContextrefresh方法,完成Bean的创建和加载。

  5. 通过@ComponentScan注解,Spring会扫描应用的基础包下以及子包下的所有类,并且在这个过程中识别出Spring的@Component@Service@Controller@Repository等注解,然后将这些类作为Bean定义信息加载到IoC容器中。

  6. 接下来,通过@EnableAutoConfiguration注解,Spring Boot会自动配置应用。这个过程实际上是通过加载spring.factories文件中定义的所有EnableAutoConfiguration类,并检查它们的条件。只有当条件满足时,这些类才会被加载到IoC容器中。

  7. 执行run方法的后续逻辑,包括执行命令行Runner、初始化应用监听器等。

  8. 最后,如果Spring应用成功启动,SpringApplicationrun方法会返回一个ApplicationContext实例。

小结

Spring Boot的启动原理是基于Spring Framework的基础之上,通过提供自动配置和各种Starter的支持,使得Spring应用的构建更加快捷、便捷。尽管Spring Boot做了很多自动化的工作,但了解其启动原理对我们深入理解Spring Boot以及排查问题是非常有益的。希望通过这篇博客,你对Spring Boot的启动原理有了更深入的了解。

参考资料

  1. Spring Boot官方文档
  2. Spring Boot启动原理深入解析
  3. Spring Boot启动过程分析

本文链接:https://my.lmcjl.com/post/10647.html

展开阅读全文

4 评论

留下您的评论.