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{
@Bean
public MockService mockService(){
return new MockServiceImpl();
}
}
@ComponentScan
@ComponentScan
注解告诉Spring在哪些地方寻找组件和配置。如果不设置basePackages
属性,Spring将从声明@ComponentScan
的类所在的包开始扫描。
@EnableAutoConfiguration
@EnableAutoConfiguration
注解让Spring Boot根据应用所声明的依赖来对Spring框架进行自动配置。它是通过@Import
注解实现的,导入了一个类EnableAutoConfigurationImportSelector
,它会读取META-INF/spring.factories
文件,获取所有的自动配置类,然后将符合条件的配置类加载到IoC容器中。
启动流程
-
调用
SpringApplication.run
方法,创建SpringApplication
对象。 -
调用
SpringApplication
的run
方法,开始执行真正的启动流程。 -
创建
ApplicationContext
,这是Spring应用的上下文。 -
执行
ApplicationContext
的refresh
方法,完成Bean的创建和加载。 -
通过
@ComponentScan
注解,Spring会扫描应用的基础包下以及子包下的所有类,并且在这个过程中识别出Spring的@Component
,@Service
,@Controller
,@Repository
等注解,然后将这些类作为Bean定义信息加载到IoC容器中。 -
接下来,通过
@EnableAutoConfiguration
注解,Spring Boot会自动配置应用。这个过程实际上是通过加载spring.factories
文件中定义的所有EnableAutoConfiguration
类,并检查它们的条件。只有当条件满足时,这些类才会被加载到IoC容器中。 -
执行
run
方法的后续逻辑,包括执行命令行Runner、初始化应用监听器等。 -
最后,如果Spring应用成功启动,
SpringApplication
的run
方法会返回一个ApplicationContext
实例。
小结
Spring Boot的启动原理是基于Spring Framework的基础之上,通过提供自动配置和各种Starter的支持,使得Spring应用的构建更加快捷、便捷。尽管Spring Boot做了很多自动化的工作,但了解其启动原理对我们深入理解Spring Boot以及排查问题是非常有益的。希望通过这篇博客,你对Spring Boot的启动原理有了更深入的了解。
参考资料
- Spring Boot官方文档
- Spring Boot启动原理深入解析
- Spring Boot启动过程分析
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhibgfkh
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22