码迷,mamicode.com
首页 > 编程语言 > 详细

SpringBoot(一) 初识SpringBoot

时间:2018-09-07 14:03:32      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:构造   inf   slist   init   clu   nbsp   coder   注解   efi   

概述

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

标签:构造   inf   slist   init   clu   nbsp   coder   注解   efi   

原文地址:https://www.cnblogs.com/KaKa-King/p/9603620.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!