Spring Boot (一)

Spring Boot (一)

概述

Spring Framework已有十余年的历史了,已成为Java应用程序开发框架的事实标准。在如此悠久的历史背景下,有人可能会认为Spring放慢了脚步,躺在了自己的荣誉簿上,再也做不出什么新鲜的东西了,或者是让人激动的东西。甚至有人说,Spring是遗留项目,是时候去看看其他创新的东西了。但事实上,Spring的生态圈里正在出现很多让人激动的新鲜事物,涉及的领域涵盖云计算、大数据、无模式的数据持久化、响应式编程以及客户端应用程序开发。在过去的几年里,最让人兴奋的大概就是Spring Boot了。


Spring Boot是什么?

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。从字面意思来理解,Boot是引导的意思,因此Spring Boot用来帮助开发者快速搭建Spring框架,它就是Spring的封装,简而言之,从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的SpringBean配置,有了Spring Boot,你就不用再写这些样板配置了,可以专注于应用程序的逻辑,这些才是应用程序独一无二的东西。


重新认识Spring

假设你受命用Spring开发一个简单的Hello World Web应用程序。你应该完成以下的工作:

  • 一个项目结构,其中有一个包含必要依赖的Maven或者Gradle构建文件,最起码要有Spring MVC和Servlet API这些依赖
  • 一个web.xml文件(或者一个WebApplicationInitialization实现),其中声明了Sping的DispatcherServlet。
  • 一个启动了Spring MVC的Spring配置。
  • 一个控制器类,以"Hello World"响应HTTP请求。
  • 一个用于部署应用程序的Web应用服务器,比如Tomcat。
    最让人难受的是,这份清单里只有一个东西是和Hello World功能相关的,即控制器(Controller),剩下的都是Spring开发的Web应用程序必须的通用样板。既然所有的Spring Web应用程序都要用到它们,那为什么还要你来提供这些东西呢?于是Spring Boot诞生了。

Spring Boot 精要

Spring Boot将很多魔法带入到了Spring应用程序的开发之中,其中最重要的是以下四个核心。

  • 自动配置:针对很多Spring应用程序的常见的应用功能,Spring Boot能自动提供相关配置。
  • 起步依赖:告诉Spring Boot需要什么功能,他就能引入需要的库。
  • 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统的项目构建。
  • Actuator:让你能够深入观察正在运行中的Spring Boot应用程序。

1.自动配置:总所周知,Spring有几个特点分别是Ioc(控制反转)、DI(依赖注入)、AOP(面向切面),有了这些你才能构建一个完整的Spring应用程序,但是整个搭建框架的过程其实是大同小异的,根据业务需求添加相应的依赖,配置数据源,整合不同的框架等等,特别是繁琐的Java配置或XML配置。比如:

<!-- 配置数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

这些都是样板配置根本不需要手动配置。Spring Boot会为这些常见的场景进行自动配置。如果Spring Boot在Classpath里发现了H2数据库的库,那么它将自动配置一个H2数据库。如果在Classpath里发现了一个JdbcTemplate,那么他将自动配置JdbcTemplate的Bean。当然,Spring Boot的自动配置远不止这些,它将涵盖到Java持久化API(Java Persistence API,JPA)、Thymeleaf模板、安全和Spring MVC等。
2.起步依赖:在往项目中添加依赖的时候,总是会遇到很多问题,比如:在解决这个问题的时候你需要使用哪些库?这些库的Group和Artifact是什么?需要什么版本?不同的依赖之间会不会有冲突?等等。Spring Boot通过起步依赖为项目的依赖管理提供帮助。起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,将常见的库聚合在一起,组成了几个为特定功能而定制的依赖。
打个比方,如果你正在用Spring MVC构造一个REST API,并将JSON作为资源表述。此外,你还想遵循JSR-303规范的声明式校验,并使用嵌入式的Tomcat服务器提供服务。你至少要引入以下依赖:

  • org.springframework:spring-core
  • org.springframework:spring-web
  • org.springframework:spring-webmvc
  • org.fasterxml.jackson.core:jackson-databind
  • org.hibernate:hibernate-validator
  • org.apache.tomcat.embed:tomcat-embed-core
  • org.apache.tomcat.embed:tomcat-embed-el
  • org.apache.tomcat.embed:tomcat-embed-logging-juli

但是,如果你使用Spring Boot的起步依赖,你就只需要添加Spring Boot的Web起步依赖

  • org.springframework.boot:spring-boot-starter-web

仅此一个一个依赖就可以完成以上全部工作,你甚至不用去考虑版本冲突,最令人惊喜的是,该应用程序是Web,所以添加了Web的启动依赖,与之相同的是,如果应用程序还用到JPA持久化,那么就可以直接添加JPA起步依赖,如果需要安全功能,那么就直接添加security起步依赖。总之,你不在需要考虑实现某种功能需要引入哪些库了,也不需要考虑版本问题,它们之间不会出现不兼容的情况。
3.命令行界面:Spring Boot CLI提供了只写代码即可实现应用程序的开发。
4.Actuator:在运行Spring Boot的应用程序时,因为自动配置和起步依赖,大大的简化了开发过程,那么就会有人想,由于前期的配置过程全部交给了Spring Boot,而程序员本身并不能很好的了解其内部究竟是如何运行,于是Actuator很好解决了这个问题。安装了Actuator就能窥探应用程序的内部情况,包括以下细节:

  • Spring应用程序上下文里配置的Bean
  • Spring Boot的自动配置做的决策
  • 应用程序的环境变量、系统属性、配置属性和命令行参数
  • 应用程序里线程的当前状态
  • 应用程序最近处理过的HTTP请求的追踪情况
  • 各种和内存用量、垃圾回收、web请求以及数据源用量相关的指标

Actuator通过Web端点和Shell界面为外界提供信息。

以上内容大部分引用自Spring Boot 实战。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值