spring boot(2)hello world深层解析


 Spring Boot HelloWorld

需求:浏览器发送hello请求,服务器接收请求并处理,响应hello world字符串

 Hello World探究

pom文件及其父项目

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.2.1.RELEASE</version>

</parent>

它的父项目

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-dependencies</artifactId>

<version>2.2.1.RELEASE</version>

<relativePath>../../spring-boot-dependencies</relativePath>

</parent>

    它来真正管理spring boot应用里面的所有依赖版本。(叫spring boot的版本仲裁中心

    所以以后我们导入依赖是默认不需要写版本的(但是,没有在dependencies里面管理的依赖自然需要声明版本号)。

 启动器

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

spring-boot-starter-web

  spring-boot-starter:spring-boot场景启动器(帮我们导入了web模块正常运行所依赖的组件)。

  spring boot将所有的组件都抽取出来,做成了一个个的starters(启动器),只需要在项目中引入相关场景启动器,就会自动将所有的依赖导入进项目,并从版本的仲裁中心自动获取相关的版本号。

  主程序类(@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 {  }


  **@SpringBootConfiguration**:spring boot的配置类(标注在某个类上,表示这是一个spring boot的配置类);

        - @Configuration:配置类上来标注这个注解。

        -配置类 就相当于 配置文件;配置类也是容器中的一个组件(@Component)。

  **@EnableAutoConfiguration**:开启自动配置功能;

        -以前我们需要配置的东西,现在spring boot帮我们自动配置;注解@EnableAutoConfiguration告诉spring boot开启自动配置功能,

这样自动配置才能生效。

@AutoConfigurationPackage

@Import({AutoConfigurationImportSelector.class})

public @interface EnableAutoConfiguration {}

        @AutoConfigurationPackage:自动配置包,

        **作用:将主配置类(@SpringBootAllication标注的类)的所在包及下面子包里面的所有组件扫描到spring容器中。**

            - @Import({Registrar.class}):spring的底层注解@import,作用:给容器中导入一个组件,组件由Registrar.class来指定。

@Import({AutoConfigurationImportSelector.class})

- AutoConfigurationImportSelector :导入那些组件的选择器

 - public String[] selectImports(AnnotationMetadata annotationMetadata);

将所有需要的组件以全类名的方式返回String[]类型,这些组件就会被添加到容器中。

这些组件会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景需要的所有的组件,

并配置好这些组件。

            - 有了自动配置类,就可以免去我们手动编写配置和注入功能组件等的工作。

SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,ClassLoader)

            - 从类路径("META-INF/spring.factories")中获取EnableAutoConfiguration指定的值。

### 总结

    **Spring Boot 在启动时,从类路径META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就会生效,帮我们进行自动配置工作。**

 以前我们需要自己配置的东西,自动配置类都帮我们自动配置了。

J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.2.1.RELEASE.jar中

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容