Spring Boot 实例解析:HelloWorld 探究
-
POM 文件剖析:
- 父项目:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐parent</artifactId> <version>1.5.9.RELEASE</version> </parent> 他的父项目是 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐dependencies</artifactId> <version>1.5.9.RELEASE</version> <relativePath>../../spring‐boot‐dependencies</relativePath> </parent> 他来真正管理 SpringBoot 应用里面的所有依赖版本 SpringBoot版本控制中心 以后倒入的依赖不需要写版本(没有在 dependencies 里面管理的依赖需要声明版本号)
- 启动器:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐web</artifactId> </dependency>
- spring-boot-starter-web 依赖:
- spring-boot-starter-web:spring-boot 场景和启动器,帮我们导入了 web 模块正常运行所依赖的组件
- SpringBoot 将所有的功能场景都抽取出来,做成一个个的 starters (启动器),只需要在项目里面引入这些 starter
- 相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景的启动器
- 父项目:
-
主程序类,主入口类:
/** * @SpringBootApplication 来标注一个主程序类,说明这是一个SpringBoot应用 */ @SpringBootApplication public class HelloWorldMainApplication{ public static void main(String[] args) { // Spring应用启动起来 SpringApplication.run(HelloWorldMainApplication.class,args); } }
- @SpringBootApplication:
- SpringBoot 应用标注在某个类上,说明这个类是 SpringBoot 的主配置类,SpringBoot 就应该运行这个类的 Main 方法来启动 SpringBoot 应用
@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{
- SpringBoot 应用标注在某个类上,说明这个类是 SpringBoot 的主配置类,SpringBoot 就应该运行这个类的 Main 方法来启动 SpringBoot 应用
- @SpringBootConfigurartion:SpringBoot 的配置类
- 标注在某个类上,这表示是一个 SpringBoot 的配置类
- @Configuration:配置类上来标注这个注解
- 配置类:配置文件,配置类也是容器中的一个组件。如:@Component
- @EnableAutoConfiguration:开启自动配置功能
- 以前我们需要配置的东西,SpringBoot 帮我们自动配置
- @EnableAutoConfiguration:告诉 SpringBoot 开启自动配置功能,这样自动配置才能生效
@AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration {
- @AutoConfigurationPackage:自动配置包
- @Import(AutoConfigrationPackages.Regisrar.class):
- Spring 的底层注解,给容器中导入一个组件,导入的组件由 Auto Configuration Packages.Registart.class
- 将注解类(@SpringBootApplication 标注的类)的所在包下面所有的子包里面的所有组件扫描到 Spring 容器
- @Import(EnableAutoConfigurationInportSelector.class):
- 给容器中导入组件 @Enable Auto Configuration Import SelEctor:导入哪些组件的选择器
- 将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中。给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景所需要的组件
- 配置好这些组件:
- 有了自动配置类,免去了我们手动编写配置注入功能的组件等工作
- SPringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)
- SpringBoot 在启动的时候从类路径下的 META-INF/spring.factories 中获取 Enable-AutoConfiguration 指定的指,这些值作为自动配置类导入容器中,自动配置类就生,帮我们进行自动装配工作
- @SpringBootApplication: