对上一篇SpringBoot中“HelloWorld”的探究

Posted chenjiajiale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对上一篇SpringBoot中“HelloWorld”的探究相关的知识,希望对你有一定的参考价值。

1.POM文件

  1.父项目

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<!--上面的父项目为-->
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>2.2.1.RELEASE</version>
  <relativePath>../../spring-boot-dependencies</relativePath>
</parent>
<!--这个才是真正管理SrpringBoot应用里面的所有依赖版本-->
 

| 上即:SpringBoot的版本仲裁中心!

| 即此后导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖还是要写的,但是在此包括几乎所有要使用的依赖)

 

2.导入的依赖 

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

 

| spring-boot-starter-web 

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

  | starter:即一系列依赖大集合的描述。

SpringBoot将所有的功能场景都抽出来,做成一个个starters(启动器),只需要在项目里面引用这些starters相关场景,随后其所需的所有依赖都会被导进来。并且版本由SpringBoot自动控制(即通过上面的父属性)。要用什么功能就导入什么场景的启动器。

3.主程序类,主入口类

package com.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//告诉springboot这是个springboot应用(@SpringBootApplication)
//用于来标注主程序类
@SpringBootApplication
public class HelloWorldMain {
                                     //args是可变参数
    public static void main(String[] args) {
        /**将spring应用启动起来
        * HelloWorldMain.class 为主程序
        **/
        SpringApplication.run(HelloWorldMain.class,args);
    }
}
|@SpringBootApplication:即SpringBoot应用,标注在某个类上,说明这个类是SpringBoot的主配置类。SpringBoot就应该运行这个类的main方法来启动SpringBoot应用。
|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:SpringBoot的配置类;标注在某个类上,表示这是一个SpringBoot的配置类。

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

  | 上面所说的几个配置类其实就相当于----平时写的配置文件;配置类也是容器中的组件。@Component

 

|@EnableAutoConfiguration:开启自动配置功能。 

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

  | @AutoConfigurationPackage:自动配置包。

    | @Import({AutoConfigurationPackage.Registrar.class}):即spring底层注解@Import,给容器导入一个组件,导入的组件由AutoConfigurationImportSelector.class,将主配置类(@SpringBootApplication所标注的类)的所在包以及下面所有子包里面的所有组件扫描到Spring容器中去。

     | @Import({AutoConfigurationImportSelector.class}):给容器中导入组件。(该插件翻译为开启自动配置类的导包的选择器);AutoConfigurationImportSelector.class:即导入哪些选择器;将所有需要导入的组件以全类名的方式返回。这些组件就会被添加到容器中去。    最终会给容器中导入非常多的自动配置类(即xxxAutoConfiguration)。就是给容器中导入这个场景所需要的所有组件,并且配置好这些组件。在此下图有96个自动配置类。

技术图片

 

 

 

 

 | 有了这些自动配置类,就省的我们手动编写配置注入等工作了。

 

|SpringFactoriesLoader.loadFactoryNames(@EnableAutoConfiguration.class,classLoader);

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

 

J2EE的整体整合方案和自动配置都在spring-boot-autoconfigure-2.2.1.RELEASE.jar里面。

如有不妥,敬请斧正。

 

以上是关于对上一篇SpringBoot中“HelloWorld”的探究的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot集成篇 异步调用Async

SpringBoot整合Mybatis

SpringBoot整合Mybatis之JavaWeb应用配置篇

springboot实战(汪云飞)学习-1-2

SpringBoot入门

SpringBoot Web篇