1.1、SpringBoot简化了Spring应用程序开发
1.2、SpringBoot的基本特性
1.3、SpringBoot工作区的设置
2004年,Spring Framework 1.0正式发布。至今,Spring 已然成为Java应用开发的事实标准。
Spring Boot的目标就是帮助开发者更加敏捷地开发Spring应用程序,专注应用程序的功能。
SpringBoot的自动配置、起步依赖和CLI命令行界面简化了Spring应程序的开发。
Spring 风云再起
Spring诞生时是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。从很重的XML配置,到Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。但诸如事务管理和Spring MVC,还是需要用XML或Java进行显式配置。启用第三方库时也需要显式配置,比如基于Thymeleaf的Web视图。配置Servlet和过滤器(比如Spring的DispatcherServlet)同样需要在web.xml或Servlet初始化代码里进行显式配置。组件扫描减少了配置量,Java配置让它看上去简洁不少,但Spring还是需要不少配置。除此之外,项目的依赖管理也是费力不讨好的事情,比如选择哪些库以及库版本的兼容问题。
重新认识 Spring
用Spring开发一个简单的Hello World Web应用程序的基本需要:
》一个项目结构,其中有一个包含必要依赖的Maven或者Gradle构建文件;
》一个web.xml文件(或者一个WebApplicationInitializer实现),其中声明了Spring 的DispatcherServlet;
》一个启用了Spring MVC的Spring配置;
》一个控制器类,以“Hello World”响应HTTP请求;
》一个用于部署应用程序的Web应用服务器,比如Tomcat;
——————————————————————————————————————
SpringBoot精要
》自动配置
针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。
在任何Spring应用程序的源代码里,你都会找到Java配置或XML配置(抑或两者皆有),它们为应用程序开启了特定的特性和功能。Spring Boot会为这些常见配置场景进行自动配置。这些自动配置涉及Java持久化API(Java Persistence API,JPA)、Thymeleaf模板、安全和 Spring MVC。
你不用再写这些样板配置了,可以专注于应用程序的逻辑
》起步依赖
告诉Spring Boot需要什么功能,它就能引入需要的库。
Spring Boot通过起步依赖为项目的依赖管理提供帮助。起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖。所以需要什么功能支持就引入相关的起步依赖就行了。此外,起步依赖引入的库的版本都是经过测试的,它们之间不会出现不兼容的情况。
Spring Boot起步依赖基本都以spring-boot-starter打头,随后是直接代表其功能的名字,比如web、test。
》命令行界面
这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。
Spring Boot CLI让只写代码即可实现应用程序成为可能,它利用了起步依赖和自动配置,让你专注于代码本身。
CLI能检测到你使用了哪些类,它知道要向Classpath中添加哪些起步依赖才能让它运转起来。一旦那些依赖出现在Classpath中,一系列自动配置就会接踵而来,确保启用 DispatcherServlet和Spring MVC,这样控制器就能响应HTTP请求了。
Spring Boot CLI是Spring Boot的非必要组成部分。虽然它为Spring带来了惊人的力量,大大简化了开发,但也引入了一套不太常规的开发模型。
》Actuator
让你能够深入运行中的Spring Boot应用程序,一探究竟。
其他几个部分旨在简化Spring开发,而Actuator 则要提供在运行时检视应用程序内部情况的能力。安装了Actuator就能窥探应用程序的内部情况了,包括如下细节:
》Spring应用程序上下文里配置的Bean;
》Spring Boot的自动配置做的决策;
》应用程序取到的环境变量、系统属性、配置属性和命令行参数;
》应用程序里线程的当前状态;
》应用程序最近处理过的HTTP请求的追踪情况;
》各种和内存用量、垃圾回收、Web请求以及数据源用量相关的指标;
Actuator通过Web端点和shell界面向外界提供信息。如果要借助shell界面,你可以打开SSH (Secure Shell),登入运行中的应用程序,发送指令查看它的情况。
Spring Boot 不是什么
》Spring Boot不是应用服务器
Spring Boot 在应用程序里嵌入了一个Servlet容器(Tomcat、Jetty或Undertow),所以Spring Boot可以把Web应用程 序变为可自执行的JAR文件,不用部署到传统Java应用服务器里就能在命令行里运行。
》Spring Boot也没有实现诸如JPA或JMS(Java Message Service,Java消息服务)之 类的企业级Java规范。它的确支持不少企业级Java规范,但是要在Spring里自动配置支持那些特 性的Bean。
》Spring Boot没有引入任何形式的代码生成,而是利用了Spring 4的条件化配置特性, 以及Maven和Gradle提供的传递依赖解析,以此实现Spring应用程序上下文里的自动配置。
SpringBoot入门
从根本上来说,Spring Boot的项目只是普通的Spring项目,只是它们正好用到了Spring Boot 的起步依赖和自动配置而已。
开启一个新的Spring Boot项目最快的方法就是安装Spring Boot CLI,安装后就可以开始写代码,接着通过 CLI来运行就好。
Spring Boot CLI为Spring Boot提供了快速上手和构建简单原型应用程序的途径。在正确的生产运行时环境下,它也能用于开发生产应用程序。
Spring Boot CLI的几种安装方式
用下载的分发包进行安装。
用Groovy Environment Manager进行安装。 通过OS X Homebrew进行安装。
使用MacPorts进行安装
( Spring Boot CLI安装方法详见:https://my.oschina.net/happyran/blog/1588818 )
使用 Spring Initializr 初始化 Spring Boot 项目
通常 情况下,Java项目用Gradle或Maven这样的工具构建出WAR文件,再把这些文件部署到应用服务 器里。
Spring Initializr从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构。
虽然不能生成应用程序代码,但它能为你提供一个基本的项目结构,以及一个用于构建代码的 Maven或Gradle构建说明文件。
Spring Initializr有几种用法。
通过Web界面使用。
通过Spring Tool Suite使用。
通过IntelliJ IDEA使用。
使用Spring Boot CLI使用。
( Spring Initializr几种用法详见:https://my.oschina.net/happyran/blog/1588830 )
小结
自动配置消除了传统Spring应用程序里的很多样板配置;
Spring Boot起步依赖让你能通过库 所提供的功能而非名称与版本号来指定构建依赖;
Spring Boot CLI将Spring Boot的无阻碍开发模 型提升到了一个崭新的高度,在命令行里就能简单快速地用Groovy进行开发;
Actuator让你能深 入运行中的应用程序,了解Spring Boot做了什么,是怎么做的。