SpringBoot 初识SpringBoot

Posted 哈哈粑

tags:

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

概述

首先我们看一下boot的启动类,很明显这里面有两个重点:

1,@SpringBootApplication

2, SpringApplication的初始化

 

@SpringBootApplication

public class DemoApplication {

public static void main(String[] args) {

          SpringApplication.run(DemoApplication.class, args);

}

}

 

我们分别来研究下这两个重点,

哈哈,准备好了,我们准备开始了。

首先我们看一下@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 {

 

@AliasFor(annotation = EnableAutoConfiguration.class)

Class<?>[] exclude() default {};

 

@AliasFor(annotation = EnableAutoConfiguration.class)

String[] excludeName() default {};

 

@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")

String[] scanBasePackages() default {};

 

@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")

Class<?>[] scanBasePackageClasses() default {};

}

 

源码了解一下:可以看出来@SpringBootApplication 被 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 注解所修饰,换言之 Springboot 提供了统一的注解来替代以上三个注解,简化程序的配置。具体这些注解的作用,大家自行了解一下,这里不再陈述。

 

其次,我们揭开SpringApplication的面纱。

SpringApplication 这个类应该算是 SpringBoot 框架 的“创新”产物了,原始的 Spring中并没有这个类,SpringApplication 里面封装了一套 Spring 应用的启动流程,然而这对用户完全透明,因此我们上手 SpringBoot 时感觉简洁、轻量。

SpringBoot 启动类就是调用SpringApplication .run()方法来启动的。

我们先看看SpringApplication 的构造方法,看看SpringApplication是如何创建的。

public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {

this.resourceLoader = resourceLoader;

Assert.notNull(primarySources, "PrimarySources must not be null");

this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));

this.webApplicationType = deduceWebApplicationType();

setInitializers((Collection) getSpringFactoriesInstances(

ApplicationContextInitializer.class));

setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));

this.mainApplicationClass = deduceMainApplicationClass();

}

大概分为四个步骤:

1,deduceWebApplicationType():侦测应用的类型:创建的是 REACTIVE应用、SERVLET应用、NONE 三种中的某一种。

2,setInitializers:使用 SpringFactoriesLoader查找并加载 classpath下 META-INF/spring.factories文件中所有可用的 ApplicationContextInitializer。

3,setListeners:使用 SpringFactoriesLoader查找并加载 classpath下 META-INF/spring.factories文件中的所有可用的 ApplicationListener。

4,deduceMainApplicationClass:推断并设置 main方法的定义类。

 

执行完上面的步骤,我们就完美的创建了SpringApplication类。

 

多写代码多读书,做个有气质的Coder。

以上是关于SpringBoot 初识SpringBoot的主要内容,如果未能解决你的问题,请参考以下文章

初识SpringBoot

初识springboot

springboot 初识

初识gradle, idea+springboot Demo

初识springboot

初识Springboot