带你认识了解SpringBoot。

1.1、简介

SpringBoot是Spring的子项目,主要是用来就简化Spring开发难度的,在早期使用SpringMVC+Spring+Mybatis框架进行开发的时候,我们需要配置web.xml,spring配置,mybatis配置,然后整合到一起。现在的SpringBoot就不需要那些了,提供各种启动器使用大量默认配置俩简化我们的Spring开发过程。

1.2、优点

SpringBoot 对上述 Spring 的缺点进行的改善和优化,基于约定优于配置的思想,可 以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码 编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

版本锁定:解决是 maven 依赖版本容易冲突的问题,集合了常用的并且测试过的所有版本 使用了 Starter(启动器)管理依赖并能对版本进行集中控制,如下的父工程带有版本号, 就是对版本进行了集中控制.

<!--引入父工程-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>

(1)什么是 starter?

        starter 启动器,可以通过启动器集成其他的技术,比如说: web, mybatis, redis 等等.可

以提供对应技术的开发和运行环境.

        比如: pom 中引入 spring-boot-starter-web, 就可以进行 web 开发.

(2)starter 执行原理?

         SpringBoot 在启动时候会去扫描 jar 包中的一个名为 spring.factories.

         根据文件中的配置,去加载自动配置类. 配置文件格式是 key=value, value 中配置了很多需要 Spring 加载的类.

         Spring 会去加载这些自动配置类, Spring 读取后,就会创建这些类的对象,放到 Spring 容器中.后期就会从 Spring 容器中获取这些类对象.

(3)SpringBoot 中常用的启动器

         spring-boot-starter-web, 提供 web 技术支持

         spring-boot-starter-test

         spring-boot-starter-jdbc

         spring-boot-starter-jpa

         spring-boot-starter-redis…等等

起步依赖 :解决了完成某一个功能要整合的 jar 包过多的问题,集合了常用的 jar 包

自动配置:解决了整合框架或者技术的配置文件过多,集合了所有的约定的默认配置

(一) SpringApplication 类作用及 run()方法作用

        SpringApplication 这个类整合了其他框架的启动类, 只要运行这一个类,所有的整合

就都完成了.

        调 用 run 函 数 , 将 当 前 启 动 类 的 字 节 码 传 入 ( 主 要 目 的 是 传 @SpringBootApplication  这个注解), 以及 main 函数的 args 参数.

        通过获取当前启动类的核心信息, 创建 IOC 容器.

(二) 当前启动类@SpringBootApplication 详细剖析

        run 函数传入的当前启动类字节码, 最重要的是传入了@SpringBootApplication, 点开该注解源码, 会发现有多个注解组成,接下来会详细解释每个注解的含义. 点开这个注解源码, 发现有 4 类注解.

 (1) 第一类: JDK 原生注解 4 个

@Target(ElementType.TYPE) //当前注解的使用范围

@Retention(RetentionPolicy.RUNTIME) //生命周期

@Documented //声明在生成 doc 文档时是否带着注解

@Inherited //声明是否子类会显示父类的注解

(2)第二类: @SpringBootConfiguration

        点开该注解源码, 会发现本质是@Configuration,定义该类是个配置类功能等同于 xml

配置文件.

        提到@Configuration 就要提到他的搭档@Bean, 使用这两个注解就可以创建一个简 单的 Spring 配置类, 可以用来替代相应的 xml 配置文件.可以理解为创建了 IOC 容器了.

(3)第三类: @ComponentScan, 包扫描功能.

        这个注解对应 Spring 的 XML 配置中的@ComponentScan,其实就是自动扫描并加 载符合条件的组件(比如@Component 和@Repository 等)或者 bean 定义, 最终将这些 bean 定义加到 IOC 容器中. 也可以通过 basePackages 等属性来细粒度的定制@ComponentScan 自动扫描的范围, 如果不指定, 则默认扫描@ComponentScan 所在类的 package 及子包进行扫描。

        注:所以 SpringBoot 的启动类最好是放在 root package 因为默认不指定 basePackages, 这样能扫描 root package 及子包下的所有类.

(4)第四类: @EnableAutoConfiguration

        点开源码会发现,本质是@import, 自动导入功能

         1. @EnableAutoConfiguration 也是借助@Import 的帮助,将所有符合自动配置条件的 bean 定义加载到 IoC 容器. @EnableAutoConfiguration 会根据类路径中的 jar 依赖为项目进行自动配置, 如:添加了 spring-boot-starter-web 依赖, 会自动添加 Tomcat 和 SpringMVC 的依赖, SpringBoot会对 Tomcat 和 SpringMVC 进行自动配置.

        2. 那么 SpringBoot 是如何完成自动配置的呢?

        A. SpringBoot 自动配置的注解是 @EnableAutoConfiguration.

        B. 我们用的时候是在启动类上加@SpringBootApplication,这个注解是复合注解,内部包 含 @EnableAutoConfiguration

        C. @EnableAutoConfiguration 内部有一个@Import, 这个注解才是完成自动配置的关键.

        D. @Import 导入一个类(AutoConfigurationImportSelector),这个类内部提供了一个方法(selectImports). 这个方法会扫描导入的所有 jar 包下的 spring.factories 文件. 解析文件中自动配置类 key=value, 将列表中的类创建,并放到 Spring 容器中.

总之一个@SpringBootApplication 注解就搞定了所有事, 它封装了核心的

@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan 这三 个类,大大节省了程序员配置时间,这就是 SpringBoot 的核心设计思想.

内置 Tomcat:通过内置的 tomcat,无需再用其他外置的 Tomcat 就直接可以运行 javaEE 程序

总之:人们把 Spring Boot 称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建 庞大的 spring 项目,并且尽可能的减少一切 xml 配置,做到开箱即用,迅速上手,让我们 关注与业务而非配置。

1.3、SpringBoot常见注解

Spring Boot的核心注解是@SpringBootApplication , 他由几个注解组成 : 

@SpringBootConfiguration: 组合了- @Configuration注解,实现配置文件的功能;
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项@ComponentScan:Spring组件扫描

2、来个Demo(后续更新)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值