SpringBoot-基本概念以及如何定义starter

SpringBoot能够改变开发Spring应用程序的方式:

  • Spring Boot Starter:它将常用的依赖分组进行了整合,将其合并 到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle 构建中;
  • Spring Boot的自动配置特性利用了Spring 4对条件化配 置的支持,合理地推测应用所需的bean并自动化配置它们;
  • 自动配置:命令行接口(Command-line interface,CLI):Spring Boot的CLI发挥了Groovy编程语言的优势,并结合自动配置进一步简化Spring应用的开发;
  • Actuator:它为Spring Boot应用添加了一定的管理特性。

各种官方starter地址

很多Starter引用了其他的Starter。大多数的Starter都会引用spring-boot-starter,它实际上是一个基础的Starter(当然,它也依赖了logging Starter)。依赖是传递性的

关于自动配置

Spring Boot的Starter减少了构建中依赖列表的长度,而Spring Boot的自动配置功能则削减了Spring配置的数量。它在实现时,会考虑应用中的其他因素并推断你所需要的Spring配置。
比如我们要将Thymeleaf模板作为Spring MVC的视图,至少需要三个bean:ThymeleafViewResolver、SpringTemplateEngine和TemplateResolver。但是,使用Spring Boot自动配置的话,我们需要做的仅仅是将Thymeleaf添加到项目的类路径中。如果Spring Boot探测到Thymeleaf位于类路径中,它就会推断我们需要使用Thymeleaf实现Spring MVC的视图功能,并自动配置这些bean。Spring Boot Starter也会触发自动配置。

例如,在Spring Boot应用中,如果我们想要使用Spring MVC的话,所需要做的仅仅是将Web Starter作为依赖放到构建之中。将Web Starter作为依赖放到构建中以后,它会自动添加Spring MVC依赖。如果Spring Boot的Web自动配置探测到Spring MVC位于类路径下,它将会自动配置支持Spring MVC的多个bean,包括视图解析器、资源处理器以及消息转换器(等等)。我们接下来需要做的就是编写处理请求的控制器(Controller)。

通过Actuator获取了解应用内部状况

Spring Boot Actuator所完成的主要功能就是为基于Spring Boot的应用添加多个有用的管理端点。这些端点包括以下几个内容。

  • GET /autoconfig:描述了Spring Boot在使用自动配置的时候,所做出的决策;
  • GET /beans:列出运行应用所配置的bean;
  • GET /configprops:列出应用中能够用来配置bean的所有属性及其当前的值;
  • GET /dump:列出应用的线程,包括每个线程的栈跟踪信息;
  • GET /env:列出应用上下文中所有可用的环境和系统属性变量;
  • GET /env/{name}:展现某个特定环境变量和属性变量的值;
  • GET /health:展现当前应用的健康状况;
  • GET /info:展现应用特定的信息;
  • GET /metrics:列出应用相关的指标,包括请求特定端点的运行次数;
  • GET /metrics/{name}:展现应用特定指标项的指标状况;
  • POST /shutdown:强制关闭应用;
  • GET /trace:列出应用最近请求相关的元数据,包括请求和响应头。
    为了启用Actuator,我们只需将Actuator Starter依赖添加到项目中即可。

项目中加入以下依赖(有多种写法,都会依赖引入下面的两个jar包)便引入了spring-boot框架。

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>1.5.13.RELEASE</version>
            <scope>compile</scope>
            <!--代表不引用传递-->
            <optional>true</optional>
    </dependency>

会引入两个依赖包(也会引入spring底层的东西):
org.springframework.boot:spring-boot
这个类库提供了springboot的一些特性

  • 如SpringApplication类,提供了一个方便的静态方法去创建一个标准的Spring项目,它唯一的任务是创建和更新Spring的ApplicationContext
  • 内嵌web容器的选择
  • 一流的外部配置支持
  • 方便的ApplicationContext初始化配置,包括一个默认且懂事的log配置

org.springframework.boot:spring-boot-autoconfigure
是我们常用的一些功能的自动配置类,比如说mail发短信,mq消息队列自动配置,Aop自动配置等,代替了我们诸多的xml文件,自动推断生效。

org.springframework.boot:spring-boot-start-项目名
一般官方starter这里面是不包含代码的,只有一个pom文件,依赖传递导入以来的相关的功能依赖jar包,结合spring-boot-autoconfigure的代码用于自动配置。

举例来讲项目中写上

compile('org.springframework.boot:spring-boot-starter-aop')

会根据依赖传递引入

org.springframework.boot:spring-boot-starter
org.springframework:spring-aop
org.aspectj:aspectjweaver

当然用IDEA的话,列表中也会出现

org.springframework.boot:spring-boot-starter-aop

但是打开后发现下面仅仅是一个描述文件,什么也没有,官方的这个包的代码也仅有一个Pom文件

自己写的框架starter可以有多种写法,但是原则不变。
需要有项目框架源码+自动配置发现类+pom文件(打包成一个starter)+让人使用
一般的非官方starter的artifactId是:

原框架artifactId-spring-boot-starter

依赖引入的时候使用方

compile('groupId:框架artifactId-spring-boot-starter:0.2.63')

所以说有四种写法去定义starter,①②分别代表不同的项目
写法一:如druid

①原项目源码
②自动发现配置类+打包的pom文件

写法二:网上搜索自定义starter都是这样的实现

①项目源码+自动发现配置类+打包的pom文件

写法三:有点类似于Spring的写法,但是不完全相同

①项目源码+自动发现配置类
②仅有一个pom文件,用来描述依赖关系,进行打包,像Spring一样

写法四:Spring的官方实现方法,对比三来讲拆分的更加彻底

①原项目源码(org.springframework.data:spring-data-redis,io.lettuce:lettuce-core,以及Spring的底层jar等等)
②自动发现配置类(org.springframework.boot:spring-boot-starter底层又引入了org.springframework.boot:spring-boot-autoconfigure
③打包的pom文件(描述依赖关系,需要引入项目依赖源码+自动配置发现类

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章