zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    【java 自动化测试】TestNg 介绍
    【java 自动化测试】第14章:持续集成
    【java 自动化】15章节:课程总结
    【性能测试】看了一个博客,总结一下
    【Dubbo】Dubbo 接口是什么? 与http 接口有什么区别?
    【jmeter】性能测试报告分析
    Netty 相关目录
    Netty 源码学习——EventLoop
    Netty 源码分析——ChannelPipeline
    Netty 源码学习——服务端流程分析
  • 原文地址:https://www.cnblogs.com/KaKa-King/p/9603620.html
Copyright © 2011-2022 走看看