购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 启动类源码探究

1.4.1 @SpringBootApplication源码

每个SpringBoot程序都有一个主入口,也就是main方法,main里面调用SpringApplication.run()启动整个spring-boot程序,该方法所在类需要使用@SpringBootApplication注解。

@SpringBootApplication包括三大注解,@EnableAutoConfiguration,@SpringBootConfiguration,@ComponentScan。

1.4.2 @EnableAutoConfiguration注解

@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架自动配置。

以前需要手动配置的代码,SpringBoot自动地配置。而注解@EnableAutoConfiguration就是告知SpringBoot开启自动配置的功能,这样自动配置才能生效。

点击该注解查询源码可以发现该注解中有@AutoConfigurationPackage,@Import({AutoConfigurationImportSelector.class})源码如下所示。

@AutoConfigurationPackage

点击@AutoConfigurationPackage中会发现有个组合注解,这个注解表示用于自动配置包点击该注解的可以看到有个Spring底层的注解@Import就是给容器中导入组件,由AutoConfigurationPackages.Registrar.class决定,源码如下所示。

点进Registrar.class这个类可以看到核心的注册并定义信息方法;metadata是注解的原信息,源码如下所示。

@AutoConfigurationPackage本身的含义就是将主配置类也就是“@SpringBootApplication标示的类”所在包及子包里面所有的组件扫描到Spring容器中。

@Import({AutoConfigurationImportSelector.class})

给容器导入组件导入的选择EnableAutoConfigurationImportSelector.class这个选择器类决定。

所导入的对应的注解在spring-boot-autoconfigure\2.3.3.RELEASE\META-INF\spring.factories文件中,源码如下所示。

常用的自动装配的组件:

AopAutoConfiguration:在使用Spring的时候需要AOP相关的功能,在这里该组件就会生效。

CacheAutoConfiguration:使用缓存需要的组件。

JacksonAutoConfiguration:在请求控制层返回json数据的时候需要的组件。

HikariDriverConfigurationFailureAnalyzer:在与数据连接数据库需要的组件。

1.4.3 @SpringBootConfiguration

@SpringBootConfiguration(内部为@Configuration):被标注的类等于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境,源码如下所示。

1.4.4 @ComponentScan

@ComponentScan:组件扫描,可自动发现和装配Bean,默认扫描SpringApplicati on的run方法里的主启动类.class所在的包路径下文件,所以最好将该启动类放到根包路径下。

总结

本章了解了什么是SpringBoot,SpringBoot给开发者带来的优势,并且学习了如何使用SpringInitializr快速构建一个SpringBoot的工程。学习了SpringBoot核心运行原理,使用SpringBoot时,只需引入对应的Starters,SpringBoot启动时便会自动加载相关依赖,配置相应的初始化参数,以最快捷,简单的形式对第三方软件集成,这便是SpringBoot的自动配置功能。

作业

1.使用插件SpringInitializr快速构建一个SpringBoot项目。

2.描述@EnableAutoConfiguration注解主要功能是什么?

3.描述主启动类的执行流程。

4.@ComponentScan注解主要功能是什么? bD56bw9l6uX+zKyMeGrh80Ntx40jb4YrgBT+Nj6i8/AIpsloTTGyDa54rQkGszGt

点击中间区域
呼出菜单
上一章
目录
下一章
×