发表于: 2019-11-07 19:47:16

1 986


今天做了什么

小课堂:

背景介绍

什么是spring boot
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员能够非常方便、快速搭建项目,不用关心框架之间的兼容性,适用版本等各种问题.
知识剖析
以一个简单的Spring Web项目为例,来对比Spring与Spring Boot的区别
使用Spring:
1)配置 web.xml,加载 Spring 和 Spring mvc
2)配置数据库连接、配置 Spring 事务
3)配置加载配置文件的读取,开启注解
4)配置日志文件
...f 
5) 配置完成之后部署 Tomcat 调试
使用SpringBoot:
1)引入Web模块
2)编写Controller
3)启动
可以看出使用SpringBoot大大简化了配置.
常见问题:
扯扯spring ,spring boot与spring cloud的区别
SpringBoot相当于Spring的扩展,它消除了Spring程序所需的复杂配置.
SpringCloud是一系列框架的有序集合, 它正式利用 Spring Boot的开发的便利性才能简化分布式系统基础设施的开发,如
服务发现注册、配置中心、消息总线、负载均衠、断路器、数据监控等,都可以用 Spring Boot的开发风格做到一键启动和部署
因此SpringCloud是建立于SpringBoot的基础上
编码实战
spring boot的原理
启动类说起 
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
一. @SpringBootApplication
是三个常用在一起的注解@SpringBootConfiguration,@EnableAutoConfiguration以及@ComponentScan的组合
1.@SpringBootConfiguration
和@Configuration有相同的作用,配备了该注解的类就能够以JavaConfig的方式完成一些配置,可以不再使用XML配置。
2.@ComponentScan 完成的是自动扫描的功能,相当于Spring XML配置文件中的<context:component-scan>
(注意:默认扫描@ComponentScan注解所在类的同级类和同级目录下的所有类)
3.@EnableAutoConfiguration
启动自动配置.这个注解是让Spring Boot的配置能够如此简化的关键性注解
二. 关键方法 SpringApplication.run(DemoApplication.class, args);>1.构造实例
                                       2.调用run方法
相应实现
// 参数对应的就是DemoApplication.class以及main方法中的args
public static ConfigurableApplicationContext run(Class<?> primarySource,
        String... args) {
    return run(new Class<?>[] { primarySource }, args);
}
// 最终运行的这个重载方法
public static ConfigurableApplicationContext run(Class<?>[] primarySources,
        String[] args) {
    return new SpringApplication(primarySources).run(args);
}
这个重载方法它实际上会先构造一个SpringApplication的实例,然后运行他的run方法
构造实例
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();
}
构造函数中做的四件事情:
判断应用类型是否是web
设置初始化器initializer
设置监听器Listener
判断应用入口类
完成实例化后,开始调用run方法
run方法中的关键点:
获取run listeners
( 实际上是一个事件中转器,它能够感知到Spring Boot启动过程中产生的事件,然后有选择性的将事件进行中转)
根据SpringApplicationRunListeners以及参数来准备环境
创建Spring上下文
Spring上下文前置处理
Spring上下文刷新
Spring上下文后置处理
( 所谓的后置操作,就是在容器完成刷新后,依次调用注册的Runners)
总结:
Spring Boot启动的关键步骤:
1.SpringApplication实例的构建过程
其中主要涉及到了初始化器(Initializer)以及监听器(Listener)这两大概念,它们都通过META-INF/spring.factories完成定义。
2.SpringApplication实例run方法的执行过程
其中主要有一个SpringApplicationRunListeners的概念,它作为Spring Boot容器初始化时各阶段事件的中转器,将事件派发给相应的Listeners(在SpringApplication实例的构建过程中得到的)。这些阶段性事件将容器的初始化过程给构造起来,提供了比较强大的可扩展性。
扩展思考
微服务是什么?
微服务(Micro Service)是一种允许开发人员独立开发和部署服务的体系结构。每个运行的服务都有自己的流程,这实现了轻量级模型以支持业务应用程序
微服务为其开发人员提供以下优势 
  • 易于部署
  • 简单的可扩展性
  • 与容器兼容
  • 最低配置
  • 生产时间较短

Spring Boot Starters是什么:

处理依赖管理对于大项目来说是一项艰巨的任务。 Spring Boot通过提供一组依赖项来解决此问题,以方便开发人员。
例如,如果要使用Spring和JPA进行数据库访问,则在项目中包含spring-boot-starter-data-jpa依赖项就足够了。
请注意,所有Spring Boot启动程序都遵循相同的命名模式spring-boot-starter-*,其中*表示它是应用程序的一种类型。
参考文献
更多讨论
视频链接
ppt链接
https://it-xzy.github.io/NEW-JAVA/

重新做任务的思维导图


收获

问题

明天的计划


返回列表 返回列表
评论

    分享到