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的主要内容,如果未能解决你的问题,请参考以下文章